- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
Двоичная система
счисления имеет основание
и алфавит
.
Веса разрядов двоичного числа
или
где
.
Так как в этой двоичной системе счисления нельзя представить отрицательные числа, то для их записи перед числом ставят знак (–) минус. В качестве разделителя целой и дробной частей числа используют символ (.) точка. Отрицательное двоичное число –110011.0101 имеет количественный эквивалент
Запись чисел в двоичной системе счисления содержит длинные цепочки чередующихся 0 и 1, что сильно затрудняет их восприятие и запоминание человеком. Сравните запись десятичного целого +1356 с его двоичным эквивалентом +10101001100. Это является одной из причин, по которым в вычислительной технике кроме двоичной системы счисления применяют восьмеричную и шестнадцатеричную системы счисления.
В
Удвоеннй остаток
x1 A
01101 1011 1011
(X1Y)=1
00100
1011
(X1Y)=0
01000
1011
(X1Y)=0
10000
1011
(X1Y)=1
01010
1011
(X1Y)=0
10100
1011
(X1Y)=1
10010
B
1101 1011
1011
1.00101
...
(X1Y)=1
0010
1011
(X1Y)=0
0100
1011
(X1Y)=0
1000
1011
(X1Y)=1
0101
1011
(X1Y)=0
1010
1011
(X1Y)=1
0001
системе с основанием используют алфавит цифр
Веса разрядов числа в восьмеричной системе счисления
Веса разрядов числа в шестнадцатеричной системе счисления
Восьмеричное число 134.278 (будем приписывать к числу справа индекс, указывающий основание системы счисления в тех случаях, когда система счисления не очевидна из контекста) имеет значение
.
Количественный эквивалент шестнадцатеричного целого числа 3AF9 равен
,
так как количественные эквиваленты цифры A=10 и цифры F=15.
При подсчете
количественного эквивалента дробной
части числа удобно пользоваться следующим
способом. Примите условно, что дробная
часть числа является числом целым.
Например, при подсчете дробной части
числа 134.278 примем, что 27 – целое и имеет
количественный эквивалент
.
Количественный эквивалент этого целого
умножьте на вес младшего разряда дробной
части числа. Например, при подсчете
дробной части числа 134.278 получим
.
Тогда количественный эквивалент числа
134.278 равен
.
Поскольку основания
восьмеричной и шестнадцатеричной систем
счисления принадлежат ряду чисел
то преобразования чисел из этих систем
в двоичную и из двоичной системы в
восьмеричную или шестнадцатеричную
выполняются весьма просто.
Для преобразования числа из восьмеричной или шестнадцатеричной системы счисления в двоичную достаточно заменить в исходной записи числа каждую цифру ее двоичным эквивалентом. Двоичные коды цифр приведены в табл.2.2.
Например, результат преобразования числа 134.278 в двоичную систему счисления будет 001 011 100. 010 1112, а числа 3AF916 получится 0011 1010 1111 10012. Убедитесь, что количественные эквиваленты двоичных чисел действительно равны количественным эквивалентам их исходных представлений.
Преобразование двоичных чисел в восьмеричные и в шестнадцатеричные сводится к разбиению двоичного числа на группы по три (на триады) или по четыре (на тетрады) разряда в каждой группе соответственно. Разбиения выполняют влево и вправо от запятой. Затем триады или тетрады заменяют цифрой системы счисления, в которую выполняют преобразование.
Например, двоичное число 1011100.010111 после разбиения на триады примет вид:
001 011 100. 010 111
а после разбиения на тетрады: 0101 1100. 0101 1100
Заменив двоичный код в каждой триаде или тетраде соответствующей ему восьмеричной или шестнадцатеричной цифрой, получим 134.278 и 5C.5C16 соответственно.
К
Таблица 2.2
Цифра
Количественный эквивалент
цифры
Двоичный код
цифры
восьмеричной
шестнадцатеричной
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
000
001
010
011
100
101
110
111
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Системы счисления, цифры которых заменены их двоичными эквивалентами, называют двоично-кодированными системами счисления.
Заменяя цифры в шестнадцатеричном числе их двоичными кодами, фактически выполняют преобразование шестнадцатеричного числа в двоично-шестнадцатеричную систему счисления. Устраняя разбиение двоично-шестнадцатеричного числа на тетрады, преобразовывают его в двоичную систему счисления.
В ЭВМ десятичные числа представляют в двоично-десятичных системах счисления. Для этого десятичным цифрам приводят в соответствие двоичные коды, и каждую цифру десятичного числа заменяют ее двоичным кодом, подобно тому, как записывают шестнадцатеричные числа в двоично-шестнадцатеричной системе счисления.
Для кодирования 10 десятичных цифр необходима минимальная длина двоичного кода 4, так как двоичный код длиной 3 имеет только 8 комбинаций от 000 до 111. Двоичный код длиной 4 имеет 16 комбинаций от 0000 до 1111, которых более чем достаточно для кодирования цифр от 0 до 9.
Каждой десятичной цифре приводят в соответствие не менее чем один двоичный код. Причем код, приведенный в соответствие какой-либо цифре, не может быть приведен в соответствие другой цифре, иначе цифру нельзя распознать. Соответствие между десятичными цифрами и их двоичными кодами можно описать табличным способом, подобно тому, как в табл.2.2 описано соответствие шестнадцатеричных цифр и их двоичных кодов. Таблицу соответствия называют таблицей кодирования или кодовой таблицей.
Ничто не мешает строить таблицу кодирования, приводя в соответствие цифре 0 любой код из 16, а цифре 1, – любой другой код из оставшихся 15 кодов и т.д. Так как кодов 16, а цифр только 10, то 6 кодов будут лишними. Лишние коды можно запретить использовать для кодирования цифр (считать их значками, не имеющими смысла) или применить для кодирования некоторых уже закодированных цифр (разрешить одну цифру изображать двумя или большим числом разных значков). В последнем случае имеет место неоднозначность представления десятичных цифр двоичными кодами. Наличие в записи двоично-десятичного числа кода неиспользуемого для кодирования десятичных цифр следует рассматривать как ошибку в записи числа.
В табл.2.3 в колонке 2 приведен вариант произвольного кодирования десятичных цифр двоичными кодами. В этом варианте коды цифр выбраны произвольно и 6 кодов: 0101, 0111, 1000, 1001, 1010, 1011 не используются. Десятичное число 230,14 в этом произвольном коде будет записано так:
1110 0110 1000 . 0001 1111
Из всего множества вариантов кодирования выделяют подмножество кодов называемых взвешенными кодами. Каждая двоичная цифра во взвешенном коде имеет вес. Значение кодируемой десятичной цифры можно вычислить, суммируя веса двоичных цифр кода равных 1. В табл.2.3 в колонках 3 и 4 приведены два варианта взвешенных кодов с весами цифр 8421 и 2421.
Таблица 2.3
Дес. цифра |
Двоичные коды десятичных цифр |
||||||
Произвольный |
8421 |
2421 |
8421+6 |
8421+3 |
|
Код Джонсона |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
0 1 2 3 4 5 6 7 8 9 |
1000 0001 1110 0110 1111 1101 1100 0011 0100 0010 |
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 |
0000 0001 0010 1001 1010 0101 1100 0111 1110 1111 |
0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 |
0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 |
1100 1101 0010 0011 0000 0001 0110 0111 0100 0101 |
00000 00001 00011 00111 01111 11111 11110 11100 11000 10000 |
В коде 8421 десятичной цифре соответствует целое число в двоичной системе счисления. Например, цифре 5 соответствует код 0101, количественный эквивалент которого равен 4+1=5.
В коде 2421 десятичной цифре 3 соответствует код 1001. Вес левой 1 в этом коде 2, а правой – 1. Сумма весов единиц 2+1=3. Код цифры 9 – 1111, так как сумма весов четверки единиц 2+4+2+1=9.
В коде 8421 шесть кодов с количественным эквивалентом большим, чем 9, для кодирования десятичных цифр не используются. Например, код 1111 с количественным эквивалентом 15.
В коде 2421 колонки 4, так же как и в коде 8421, не использованы 6 кодов. Однако можно определить код 2421 так, что все 16 кодов будут использоваться. Для этого достаточно разрешить запись любого кода из 16 возможных. Тогда, например цифра 4 может быть представлена двумя кодами: 0100 и 1010, а цифра 5 – кодами: 1011 и 0101. В этом проявляется неоднозначность представления десятичных цифр в коде 2421. Ничего подобного нельзя сделать в коде 8421, так как количественный эквивалент любого неиспользованного кода превышает 9. Код 2421 интересен также тем, что содержит минимально возможные веса разрядов.
Взвешенных
двоично-десятичных кодов много. Например,
коды с весами 5211 или 4221. Взвешенные коды
могут иметь отрицательные веса некоторых
разрядов, например
.
Закодируйте в коде
все десятичные цифры.
Десятичное число 230.14 в двоично-десятичном коде
2 3 0 , 1 4
8421: 0010 0011 0000 . 0001 0100; 2 3 0 , 1 4
2421: 1000 1001 0000 . 0001 1010 или 0010 0011 0000 . 0001 1010.
Запись 1111 0000 в
двоично-десятичном коде 8421 не является
числом, так как код 1111 не имеет
количественного эквивалента десятичной
цифры и не применяется для кодирования
десятичных чисел. Эта же запись в коде
2421 или в коде
соответствует десятичному числу 90.
Коды в колонках 5 и 6 называют взвешенными смещенными кодами. Если сопоставить коды одной строки в колонках 3 и 5, то не трудно видеть, что код в колонке 5 на 6 больше, чем в колонке 3. Значение 6 называют смещением. Смещение кода в колонке 6 равно 3.
Код в колонке 7
взвешенный со смещением (+4). Веса его
разрядов совпадают с весами разрядов
чисел в системе с основанием
.
Значение кода меньше значения кодируемой
им цифры на 4 и может быть отрицательным.
Например, код 1101 имеет
значение
(-8)×1+4×1+(-2)×0+1×1= -3, что на 4
меньше кодируемой им цифры 1.
Код Джонсона использует двоичный вектор длиной 5. Этот код интересен тем, что для увеличения значения цифры на 1 достаточно сдвинуть исходный код на 1 разряд влево с занесением в младший разряд цифры инверсной цифре выдвигаемой из старшего разряда. Например, для увеличения цифры 2 на 1 достаточно сдвинуть влево ее код 00011 с занесением инверсии 0 в старшем разряде в младший разряд. Действительно, получим 00111 – код цифры 3.
Разумеется, что для уменьшения цифры на 1 достаточно сдвинуть ее код на разряд вправо с занесением в освобождающийся старший разряд инверсии цифры выдвигаемой из младшего разряда. Например, сдвиг вправо кода 11111 (5) приведет к получению кода 01111 (4).
Безусловно, можно уменьшать или увеличивать цифру на 2, на 3 и т.д., выполняя сдвиг на 2 или 3 разряда соответственно.
Конструктор цифровых устройств в зависимости от их функции выбирает такой способ кодирования десятичных цифр, который позволяет обеспечить минимум затрат оборудования, максимальное быстродействие и/или иные показатели качества проектируемого изделия в условиях множества ограничений. При конструировании устройств выполняющих арифметические операции с десятичными числами можно использовать любой способ кодирования цифр и хранить таблицы сложения, вычитания и умножения двоично-десятичных цифр в предназначенных для этого устройствах памяти. Однако размерность этих таблиц 10´10 велика, что требует большого объема памяти и, следовательно, усложняет устройства. Достоинство двоичной системы счисления в том, что таблицы имеют минимальную размерность 2´2. Поэтому целесообразно выбирать такой способ кодирования десятичных цифр двоичными кодами, который позволяет вычислять сумму, разность или произведение десятичных цифр используя двоичные таблицы. В связи с этим получили распространение двоично-десятичные коды 8421; 8421+6 и 8421+3. Выполнение арифметических операций в этих кодах описано в разделе 4.
