Изменения

Перейти к: навигация, поиск
м
Дополнительный код (дополнение до двух)
*если число отрицательное, то все биты модуля числа инвертируются, то есть все единицы меняются на нули, а нули — на единицы, к инвертированному числу прибавляется единица, далее к результату дописывается знаковый разряд, равный единице.
В качестве примера переведём число −5 <tex> -5 </tex> в дополнительный восьмибитный код. Прямой код модуля −5 <tex> -5 </tex> <tex> 0000101</tex>, обратный — <tex> 1111010</tex>, прибавляем <tex> 1</tex>, получаем <tex> 1111011</tex>, приписываем <tex> 1 </tex> в качестве знакового разряда, в результате получаем <tex> 11111011</tex>.
Также дополнительный код отрицательного числа <tex> A </tex>, хранящегося в <tex> n </tex> битах, равен <tex> 2^n - |A|</tex>. По сути, дополнительный код представляет собой дополнение <tex> |A| </tex> до <tex> 0 </tex>: так как в <tex> n </tex>-разрядной арифметике <tex> 2^{n} = 0 </tex> (двоичная запись этого числа состоит из единицы и <tex> n </tex> нулей, а в <tex> n </tex>-разрядную ячейку помещаются только <tex> n </tex> младших разрядов, то есть <tex> n </tex> нулей), то верно равенство <tex> 2^n - |A| + |A| = 0 </tex>.
Для получения из дополнительного кода самого числа нужно инвертировать все разряды кода и прибавить к нему единицу. Можно проверить правильность, сложив дополнительный код с самим числом: результат должен быть равен <tex> 2^n </tex>. Переведём <tex> 11111011 </tex> обратно. Инвертируем — <tex> 00000100</tex>, прибавляем <tex> 1</tex>, получаем <tex> 00000101 </tex> — модуль исходного числа −5<tex> -5 </tex>. Проверим: <tex> 11111011 + 00000101 = 100000000</tex>.
Можно получить диапазон значений <tex> [-2^{n-1}; 2^{n-1} - 1] </tex>.
37
правок

Навигация