Представим коды цифр в таблице:
Цифра | Код “2421” | Цифра | Код “2421” |
0 | 0000 | 5 | 0101 или 1011 |
1 | 0001 | 6 | 0110 или 1100 |
2 | 0010 или 1000 | 7 | 0111 или 1101 |
3 | 0011 или 1001 | 8 | 1110 |
4 | 0100 или 1010 | 9 | 1111 |
Как видно из таблицы, ряд десятичных цифр могут быть представлены двумя не совпадающими двоичными комбинациями.
Например, комбинации 0100 и 0010 изображают цифру 2, комбинации 1010 и 0100 изображают цифру 4 и т.д. Отличительной особенностью данного кода является то, что в нем нет неиспользованных (запрещенных) комбинаций.
в) Код “2 из 5”
Данный код принадлежит к непозиционным кодам. Как и все непозиционные коды он определяется табличным способом. Его название отражает принцип построения кода: любая десятичная цифра представляется комбинацией из 5 двоичных цифр, в которой точно две цифры 1 и, следовательно, три цифры 0.
Представим таблицу одного из возможных вариантов для данного кода:
Цифра | Код | Цифра | Код |
0 | 11000 | 5 | 01010 |
1 | 00011 | 6 | 01100 |
2 | 00101 | 7 | 10001 |
3 | 00110 | 8 | 10010 |
4 | 01001 | 9 | 10100 |
Все остальные возможные комбинации, в которых число единиц не равно двум, являются запрещенными.
Также как и все коды на основе тетрады “8421”, последний код принадлежит к группе кодов, обладающих так называемыми диагностическими возможностями: Если известно, что некоторая комбинация должна изображать десятичную цифру, но попадает в область запрещенных, значит произошло искажение информации. Это свойство кодов активно используется в аппаратуре ЭВМ.
Для закрепления материала по переводу чисел из одной системы счисления в другую выполним несколько примеров.
Пример 1. Представить десятичное число 581 в двоичной, восьмеричной и шестнадцатиричной системах счисления.
Задачу можно решить с минимальными затратами усилий, выполнив, например, перевод в двоичную с/с по общему правилу (т. е. делением на основание 2 по правилам десятичной системы счисления), а затем из двоичной в восьми- и шестнадцатиричную системы счисления, используя упрощенные правила (кодированием соответственно тетрад и триад).
Пример 2. Представить десятичное число 993,761 в двоичной и шестнадцатиричной системах счисления.
Задачу можно решить таким же образом, как и предыдущую.
Пример 3. Представить шестнадцатиричное число 8363 в десятичной системе счисления.
Воспользуемся общим правилом. Для этого надо исходное число делить на 10 по правилам шестнадцатиричной системы счисления.
Выполним перевод:
(20) _(50) (20) 2 1A
2 3 ----- 1 0 (30) 3
_(35) 0 3 _ (16) -----
(30) (10) 3
----- -----
56
Искомое число в десятичной системе равно 33635.
Примечание. В круглых скобках записаны десятичные эквиваленты соответствующих шестнадцатиричных чисел. При этом в каждой паре чисел, расположенных друг под другом, первое число - частичное делимое, а второе - произведение делителя на частичное частное. Так запись (131) - эквивалент шестнадцатиричного делимого 83, а (130) - результат умножения делителя А (=10) на D (13).
Как уже говорилось выше, практически все современные цифровые ЭВМ в качестве основной используют двоичную систему счисления. А все арифметические операции над двоичными числами можно свести к двум элементарным - сложению и сдвигу двоичных кодов, изображающих числа. Это позволит технически реализовать четыре действия арифметики в одном устройстве, называемом арифметико-логическом (АЛУ), используя одни и те же электрические схемы.
1.4.1. Представление чисел со знаками
При выполнении арифметических операций в ЭВМ применяют прямой, обратный и дополнительный коды.
Как уже говорилось выше, кодом называют такую запись числа, которая отличается от естественной и общепринятой. Так вот, в математике естественной формой записи числа является запись, при которой непосредственно перед старшей значащей цифрой числа помещается знак плюс(+) или минус(-), а длина записи определяется величиной числа (иначе, количество символов, использованных для записи разных чисел, как правило, не совпадает). В ЭВМ это не так. Одной из важнейших характеристик любой ЭВМ является длина слова в ней. Длина слова определяется количеством двоичных разрядов слова.
Поэтому в ЭВМ, вне зависимости от величины числа, его код всегда имеет фиксированное количество двоичных цифр.
Кроме этого, в двоичном алфавите нет никаких символов, кроме цифр 0 и 1, и необходимы новые правила для указания знака числа. Суть этих правил сводится к тому, что знак плюс изображается цифрой 0, знак минус - цифрой 1, а цифра, изображающая знак всегда записывается самой первой в записи числа.
Обратите внимание, что код числа всегда содержит изображение его знака, в отличие от математической записи, которая позволяет опускать знак плюс при изображении положительного числа.
Так, код 011101, согласно этим правилам, изображает положительное (самая левая цифра - 0) двоичное число 11101.
Для того, чтобы более просто, и, следовательно, более экономично реализовать устройство АЛУ применяют несколько разных кодов чисел. Это связано с тем, что разные операции в ЭВМ более просто реализуются в разных кодах.
При выполнении арифметических операций в ЭВМ применяют прямой, обратный и дополнительный коды чисел.
Прямой код двоичного числа - это само двоичное число, в котором все цифры, изображающие его значение, записываются как в математической записи, а знак числа записывается двоичной цифрой.
При этом никакого символа, отделяющего эту цифру от старшей цифры, используемой при изображении его величины, не допускается. В таких случаях говорят о том, что назначение цифры в коде определяется его позицией.
Примеры.
Изображаемое число Код
· +1101 (+13) 0000 1101 ( В примерах коды )
· +1011101 (+93) 0101 1101 ( изображаются )
· 1101 (-13) 1000 1101 ( восемью цифрами )
Итак, прямой код почти не отличается от принятого в математике: для выявления абсолютной величины (модуля) числа, надо отбросить цифру, обозначающую его знак.
Однако применительно к операциям сложения и вычитания такой код неудобен: правила счета для положительных и отрицательных чисел различаются. Чтобы прояснить это обстоятельство, представим что длина кода (слова) равна 5 двоичным разрядам и запишем несколько чисел в нем:
Число | -2 | -1 | 0 | +1 | +2 |
Код | 10010 | 10001 | 00000 | 00001 | 00010 |
Как видно из примера, при использовании прямого кода при переходе значения число через ноль, происходит скачкообразное изменение кода! Поэтому построение устройства, в котором должны выполняться такие действия арифметики, как сложение чисел с разными знаками и вычитание, становится сложной задачей.
Прямой код используется при хранении чисел в памяти ЭВМ, а также при выполнении операций умножения и деления.
Чтобы построить более простые схемы АЛУ предложены и активно применяются обратный и дополнительный коды.
Обратный код положительного числа совпадает с прямым, а при записи отрицательного числа все его цифры, кроме цифры, изображающей знак числа, заменяются на противоположные ( 0 заменяется на 1, а 1 - на 0).
Примеры записи.
Изображаемое число Код
· +1101 (+13) 0000 1101 ( В примерах коды )
· +1011101 (+93) 0101 1101 ( изображаются )
· 1101 (-13) 1111 0010 ( восемью цифрами )
Сопоставление этой записи с прямым кодом показывает, что непосредственно восстановить абсолютную величину (модуль) отрицательного числа непросто. Однако, в этом коде как к положительным, так и к отрицательным числам можно применять одни и те же правила, а операцию А-В можно заменить операцией сложения чисел А и “минус В”.
Посмотрим, как представляется последовательные числа при переходе через ноль:
Число | -2 | -1 | 0 | +1 | +2 |
Код | 11101 | 11110 | 00000 | 00001 | 00010 |
Из примера видно, что переход через ноль также не выглядит естественным. Отмеченная особенность влечет за собой и следующее - в обратном коде ноль изображают две различающиеся комбинации: 00000 (+0) и 11111 (-0), что усложняет аппаратную реализацию операций.
Для восстановления прямого кода отрицательного числа из обратного кода надо все цифры, кроме цифры, изображающей знак числа, заменить на противоположные.
Дополнительный код положительного числа совпадает с прямым, а код отрицательного числа образуется как результат увеличения на 1 его обратного кода.
Иными словами, процесс построения дополнительного кода отрицательного числа можно разбить на два этапа - построить обратный код, а затем из него построить дополнительный.