Двоично дополнительный код
Primary tabs
Forums:
Двоично дополнительный код - форма представления, при которой вычитание можно привести к сложению (суммированию) в двоичной системе.
Как получить дополнительный код числа?
(не могу не упомянуть о замечательной статье ссылка на которую есть здесь)
Начнём с того, что операции должны проводиться с определённым числом разрядов - для примера рассмотри 8 бит:
0 0 0 0 | 0 0 0 0
чтобы легче было читать будем ставить ("чисто для разметки") вертикальную черту после 4-ёх первых бит.
Второй момент - первый разряд (бит) в двоично дополнительном коде служит для определения знака числа.
И третье - положительные числа в двоично дополнительном коде кодируется также как и в "обычной жизни" - но помним о том. что в первом разряде должен быть ноль, например максимальное из чисел которое можно закодировать в двоично-дополнительном коде = +127:
0 1 1 1 | 1 1 1 1
Также полезно ознакомиться с такой вот таблицей:
Десятичное представление Код двоичного представления (8 бит) прямой обратный дополнительный 127 01111111 01111111 01111111 1 00000001 00000001 00000001 0 00000000 00000000 00000000 -0 10000000 11111111 --- -1 10000001 11111110 11111111 -2 10000010 11111101 11111110 -3 10000011 11111100 11111101 -4 10000100 11111011 11111100 -5 10000101 11111010 11111011 -6 10000110 11111001 11111010 -7 10000111 11111000 11111001 -8 10001000 11110111 11111000 -9 10001001 11110110 11110111 -10 10001010 11110101 11110110 -11 10001011 11110100 11110101 -127 11111111 10000000 10000001 -128 --- --- 10000000
Получение двоично дополнительного кода для отрицательных чисел
Следует сделать следующее (для отрицательного числа):
- Записать модуль числа в двоичной форме в указанное количество разрядов, например для -4 его модуль |-4| = 4:
0 0 0 0 | 0 1 0 0
- Инвертировать все разряды (значения бит):
0 0 0 0 | 0 1 0 0 -------> 1 1 1 1 | 1 0 1 1
- Прибавить единицу:
1 1 1 1 | 1 0 1 1 + 0 0 0 0 | 0 0 0 1 -------------- 1 1 1 1 | 1 1 0 0
Вот мы и получили представление числа -4 в двоично-дополнетельном коде:
1 1 1 1 | 1 1 0 0
Обратное преобразование
Что мы можем сказать о данном числе "чисто на взгляд", если не знаем из какого десятичного оно получено?
Фактически нас интересуют две вещи:
- Какого знака это число
- Должны ли мы переводить это число "обратно" в прямой двоичный код
Знак после выполнения операции определяется состоянием старшего (самого "левого") бита. Если старший бит =1, то производим обратное преобразование, для получения модуля отрицательного числа в двоичном коде:
- вычитаем единицу
- инвертируем все разряды
- Log in to post comments
- 11286 reads