Почему смещение в сторону отрицательных чисел? - PullRequest
0 голосов
/ 03 июля 2010

Если в моем компиляторе int имеет значение 16 бит, то его диапазон составляет от -32768 до 32767 (в машине дополнения до 2).
Я хочу знать, почему у отрицательных чисел есть 1 дополнительный номер.т.е. положительные числа идут до 32767, а отрицательные - до еще одного, т.е.-32768.

Как -32768 изображено на 2-м дополнении м / с?

Ответы [ 5 ]

6 голосов
/ 03 июля 2010

На 16 битах можно сопоставить различные комбинации комбинаций pow (2,16) (от 2 до шестнадцатой) для представления 65536 чисел.Было решено, что ноль выглядит лучше всего в исходном виде в виде 000 ... 000, а положительные числа в системе «два дополнения» обычно читаемы (они равны так называемому «натуральному двоичному» представлению, например, 0000 0000 0000 0101 = 5 десятичных и т.д.).

Отрицательные числа в дополнении до двух начинаются с 1111 1111 1111 1111 для обозначения -1.Думайте об этом как о счетчике с номерами, которые идут 997, 998, 999, и внезапно, когда он должен представлять 1000, он переполняется и показывает 000. Принцип здесь тот же, но направление наоборот - от ... 000к ... 111.-2 представлен как 1111 .... 1110 и т. Д.

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

3 голосов
/ 03 июля 2010

Если вы ищете простой, приземленный ответ:

Никакого смещения нет.Есть одинаковое количество чисел на положительной и отрицательной стороне, положительные числа просто начинаются с 0 и отрицательные с -1, поэтому, следовательно, разница равна единице.:)

1 голос
/ 03 июля 2010

Еще один способ думать об этом - создать 1-битную переменную со знаком. Подписано означает, что должны быть отрицательные числа и, конечно, будут положительные числа. Таким образом, вы можете иметь 1 положительный и один отрицательный, какие два числа вы представляете Теперь давайте сделаем 2 бита, какие 2 положительных и отрицательных вы представляете? на самом деле секрет в том, что последний бит представляет собой минус.

Есть дополнительная работа, если мы хотим считать 0 отрицательным числом. и было бы расточительно иметь отрицательный 0.

1 голос
/ 03 июля 2010

Нет отрицательного нуля. (-0). Вот почему это кажется предвзятым. Действительно считается отрицательным, если последний бит установлен. В байте есть еще 7 бит, которые можно установить как в положительном, так и в отрицательном диапазоне.

1 голос
/ 03 июля 2010

На самом деле никакого смещения нет. Число является отрицательным, когда установлен старший значащий бит. Для «положительного числа» (т. Е. MSB равен , а не установлен), а также 1-32767, у вас есть ноль, отсюда и очевидное отсутствие 32768.

-32768 будет представлен 0b1000000000000000. См текст ссылки

...