Число -128 в однобайтовом представлении

Представление отрицательных целых чисел.

Минимальное число в однобайтовом представлении выглядит так:

11111111

где самый старший разряд 1 - это знак Минус, а остальные семь единиц - это число 127. Получается, что минимальное однобайтовое число это -127.

Тогда максимальное число будет 127:

 


01111111

В итоге имеем  127 отрицательных, 127 положительных и число 0. Всего 255 чисел. А где 256-ое число?

Конечно же это число -128, но как оно записывается если минимальное число -127?

Вот два числа:

 


10000000

 


00000000

То рассуждая также как и выше можно сказать, что это числа -0 и +0. 

Но это не так. Число 0 не имеет знака и двойной записи. Одно из них число -128:


10000000

 

Вообще-то двоичное представление целых отрицательных чисел в памяти компьютера производится в дополнительном коде, поэтому , строго говоря, единица в старшем разряде - это не код знака "минус", а признак того, что число отрицательное и в то же время по сути часть числа. 

Десятичное "-128" кодируется следующим образом: берём модуль числа, т.е. 128 и переводим в 2с/c. Получаем прямой код - это 10000000.  Затем инвертируем этот код. Получаем                                                                     01111111. Затем к младшему разряду инвертированного кода прибавим 1. Будет       10000000. 

Именно поэтому модули целых отрицательных чисел на 1 больше положительных при хранении в одинаковом количестве ячеек памяти.

 

 

!

Область интересов: