Введение в двоичную арифметику
Из примера видно, что эквивалентность между операциями неполная: сложение с дополнением сопровождается переносом в 9-й разряд, которого нет при прямом вычитании. Этот факт приводит к тому, что мы уже не можем считать перенос в 9-й разряд критерием того, что результат сложения не может быть представлен 8-ю битами. Точный критерий переполнения для целочисленных операций сложения и вычитания теперь звучит так: переполнение произошло, если перенос в 9-й бит (для 8-разрядного АЛУ) не равен переносу в 10-й бит.
Но в остальном двоичное дополнение сильно упрощает жизнь проектировщикам процессоров: вместо двух устройств, сумматора и дифференциатора (по-русски, сложителя и вычитателя), нам достаточно иметь только сумматор. Кроме того, можно представлять отрицательные числа в двоично-дополнительном коде (табл. 1.3). При таком представлении признак переполнения называют также признаком потери знака.
Видно, что четыре бита позволяют нам представить либо ноль и натуральные числа от 1 до 15, либо целые числа от -8 до 7. Во втором случае, старший бит может интерпретироваться как знаковый – если он равен 1, число отрицательное, если 0 – положительное. Для манипулирования числами в обоих представлениях можно использовать одни и те же команды сложения и вычитания, различие возникает только, когда мы начинаем интерпретировать результаты сравнения таких чисел или сами эти числа (например, переводить их в десятичный формат).
Для команд умножения и деления трюк с двоичным дополнением не проходит, поэтому процессоры, использующие такое представление данных, вынуждены иметь по две пары команд умножения и деления, знаковые и беззнаковые. Любознательному читателю предлагается самостоятельно Разработать алгоритмы умножения и деления двоичных чисел в двоично-Дополнительном представлении. За основу для этих алгоритмов опять-таки рекомендуется взять школьные методы умножения и деления многозначных чисел "в столбик".
Таблица 1.3. Двоичное представление знаковых и беззнаковых чисел.
Беззнаковое | Знаковое | Двоичное |
---|---|---|
7 | +7 | 0111 |
6 | +6 | 0110 |
5 | +5 | 0101 |
4 | +4 | 0100 |
3 | +3 | 0011 |
2 | +2 | 0010 |
1 | +1 | 0001 |
0 | 0 | 0000 |
15 | -1 | 1111 |
14 | -2 | 1110 |
13 | -3 | 1101 |
12 | -4 | 1100 |
11 | -5 | 1011 |
10 | -6 | 1010 |
9 | -7 | 1001 |
8 | -8 | 1000 |