Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






О женщинах и недесятичном исчислении





 

Всё хорошо было в нашей группе АСУ ТП ГЭС, кроме одного - слишком мало девушек. Зрелых и пожилых женщин в отделе было, что называется "завались", а вот сверстниц - увы... А тут, вдруг, прислали в отдел на практику девчонку из ПТУ[1]. Господи, да ей же нынче уже "баба ягодка опять"

Красотой Ленка не блистала, фигурой "на загляденье" - тоже, однако же молодая женская особь существенно воодушевила наше мужское сообщество. К тому же с ней всё время происходили забавные истории.

Ну, например, однажды, начальник нашего отдела не дал Елене "отгул за прогул", так через пару часов к нему в кабинет ворвались несколько рослых, бритоголовых парней в кожанках (ах, "лихие девяностые") и ещё через пару часов она уже во всю жевала шашлык в курортной зоне. Другая весёлая история произошла c участием вашего покорного слуги.

Итак, сижу я, отлаживаю очередной драйвер УСО за любимым ТВСО-1 СМ-1634, примерно таким как на рисунке ниже и складываю восьмеричные адреса, а поскольку вокруг никого делаю это в слух:

 

 

6 + 2 = 10,

7 + 2 = 11

 

 

Рисунок 1 Терминал вычислительный связи с объектом СМ-1634. Управляющий вычислительный комплекс 90--x годов

 

А мимо как раз Елена в курилку проходила. Поравнявшись со мной, затаилась, задержалась на мгновение - не ослышалась ли она. И, окрылённая впечатляющей новостью, прямёхонько в курилку. Прикурила, зажмурившись выпустила причудливую струйку дым, и многозначительно сообщала коллегам: "Переработал парень - заговаривается! Ему бы дать мою стипендию рассчитывать))!".

И её реакция была абсолютно естественна, ведь она, как и все нормальные советские люди, привыкла к числам с основанием 10, то есть к десятичным. И всем нам хорошо известно, что число 9876 есть не что иное как:

 

9*1000+ 8*100+7 *10+6

или, что тоже:

9*103 + 8*102+7*101+6*100

 

В общем виде любое число в любой системе исчисления с основанием n (привычно нам, в том числе и Елене, n просто равняется 10) представляется суммой:

 

Ak*nk+ Аk-1*nk-1+...+A1*n1+A0*N0 ([2])

Но ячейка компьютерной памяти может помнить всего два значения:

0 и 1

Программисты называют такую ячейку битом. Восемь соседних битов образуют байт:

 

               

 

Рисунок 2 Пример значения одного байта

 

Используем нашу формулу для подсчёта значения байта на Рисунок 2

У нас есть два варианта:

1. Мы хотим хранить в нашем байте положительные числа и тогда значение байта будет равно:

 

1*27 + 1*26+1*25+0*24+0*23+1*22+0*21+1*20=

128+64+32+4+1 = 229

 

Максимальное положительное число которое "влезает" в байт - когда все восемь разрядов "установлены" в единицы и по нашей формуле получится - 255. Чтобы узнать это можно пользоваться формулой:

 

MAXn = основание ** n - 1

 

В нашем случае 28 -1 = 256 -1 = 255

 

 

2. В байте можно хранить и отрицательные числа. И тогда всё становится значительно сложнее. Я точно знаю, что некоторые современные профессиональные программисты не могут правильно подсчитать значение отрицательного байта по битам на рис. 2

 

Чтобы узнать значение отрицательного числа (признаком отрицательного значения всегда является единица в знаковом, самом левом разряде), надо первым делом инвертировать все биты (00011010) и прибавить единицу. И теперь вспомним Елену Прекрасную:

1+1

будет?

2?

Но у нас в битах только 0 или 1. Правильно, как и при десятичном сложении единичка "пошла на ум" и мы получаем 10, но десять в двоичном исчисление. В десятичном же:

 

1*21 + 0*20 = 2

 

Прибавляем к нашему инвертированному байту единичку и получаем

 

11011 = 16+8 + 2 + 1 =27

 

 

Это означает, что наше отрицательное число было минус 27

А операция инвертирования и добавления называется переводом в "дополнительный обратный код". Принято говорить, что отрицательные числа хранятся в "дополнительном обратном коде". Впрочем, тоже самое можно сказать симметрично и про положительные.

 

Проверяем сложением

0001 1011 (27)

+

1110 0101 (-27)

-----------------

0000 0000

 

Прошла волна "пошло на ум" справа налево и самая левое "пошло на ум" "скрылась" в регистре расширения процессора, что является значимым только для программиста и то не для каждого.

Мы получили-таки ноль при сложении! Ура!!!!

 

Почти разобрались)))

 

Теперь мы с вами понимаем почему минимальное число по модулю на единицу больше максимального. Смотрите для максимального положительного числа байта 01111111 существует дополнительный обратный код 1000000 + 1 = 10000001, т.е 127 и -127, а вот для самого отрицательного 1000000 (-128) уже нет 01111111 + 1 = 1000000 получаем опять тоже минимальное отрицательное число

 

А теперь, как любит говорить Михаил Задорнов: "ВЫДОХНУЛИ!"

Пришлось мне, по заданию LA, переписывать драйверы всех без исключения модулей УСО CM-1634. Дабы добыть секретную информацию (ну не набивать же всё с начала), послали меня на Советский тогда ещё завод НПО "Импульс" в славный город "Северодонецк". С собой дали большущую магнитную ленту, как сейчас помню - "3M". На проходной завода как полагается "ВОХР". Стоят женщины плотного телосложения, хитрющие - никогда не знаешь что вытворят. А я был достаточно худой в демисезонном пальто почти в пол, лента, как положено- за поясом. Подаю бумажный талончик пропуска. Женщина в зелёной фуражке смотрит мне в глаза и... представляете, как бы нечаянно выпускает бумажку из рук. Я с ужасом смотрю на белый листочек на полу её ног. Дама вопрошающе смотрит на меня, а глаза весёлые, хоть и строгие. Пришлось поднять. Чувствую пуговицы на брюках аж выстрелили в подкладку пальто, причём все. Пропустила меня служивая и провожает взглядом. Иду, как ни в чём не бывало, а коридор, как назло, длинню-ю-ющий. И руки заняты и ремня н ремень тоже сорвало. Слава богу до нужного 22 отдела кое-как дошёл. Потом с местным инженером Володей Тамбовскимпо всему институту искали нитку и иголку, зашили меня прямо на мне до гостиницы наглухо. А иначе - промышленный шпионаж!)) Так уж за давностью лет... Ровно 25 лет прошло с тех пор.

Так вот, уже потом, в Ленинграде принялся я за переписывание драйвер одного модуля дискретного ввода, написанного одной из милых особ такого самого 22 отдела. Читаю текст и вижу такой комментарий к драйверу: Полярность отрицательная? Прим: отрицательной полярностью называют обычное инверсное подключение.

В драйвере надо было просто инвертировать все 16 разрядов считанные с регистра модуля. Это делается одной командой ассемблера, например такой: CMA

Date: 2016-08-29; view: 231; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию