Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
О женщинах и недесятичном исчисленииСтр 1 из 2Следующая ⇒
Всё хорошо было в нашей группе АСУ ТП ГЭС, кроме одного - слишком мало девушек. Зрелых и пожилых женщин в отделе было, что называется "завались", а вот сверстниц - увы... А тут, вдруг, прислали в отдел на практику девчонку из ПТУ[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
|