подписал два дополнения арифметики - PullRequest
5 голосов
/ 09 февраля 2011

Я думал о диапазонах типов данных, возникает вопрос.Как мы знаем, диапазон подписанных символов - от -128 до 127. Я получил, как прибывает 127, т.е.если мы просто включим бит знака, мы получим 11111111, как его равно -128?

Ответы [ 4 ]

8 голосов
/ 09 февраля 2011

В большинстве случаев компьютеры используют так называемое дополнение 2 для представления целых чисел со знаком.

Способ, которым работает дополнение 2, заключается в том, что возможные значения находятся в огромном цикле от 0 до MAX_VALUE, до MIN_VALUE, до нуля и т. Д.

Таким образом, минимальным значением является максимальное значение +1 - 01111111 = 127 и 10000000 = -128.

Это имеет приятное свойство вести себя точно так же, как арифметика без знака - если я хочу сделать -2 + 1, у меня есть 11111110 + 00000001 = 11111111 = -1, используя все то же оборудование, что и для добавления без знака.

Причина, по которой в нижнем конце есть дополнительное значение, заключается в том, что мы выбираем, чтобы все числа с установленным старшим битом были отрицательными, что означает, что 0 убирает значение с положительной стороны.

2 голосов
/ 09 февраля 2011

В два дополнения , -128 - 10000000.

0 голосов
/ 09 февраля 2011

Один простой способ думать об этом - начать с 01111111, а затем продолжать вычитать 1, пока он не обернется;предыдущее значение является наименьшим отрицательным значением.Вычитание 1 из 00000000 с использованием стандартного метода «заимствовать» дает 11111111, который действительно является двоичным представлением для -1.Мы можем продолжать вычитать до 10000000, то есть -128, и вычитать еще один, снова получая 01111111, оборачиваясь вокруг.

0 голосов
/ 09 февраля 2011

Отрицательные числа имеют бит знака, установленный в 1;-128 - это значение с установленным знаковым битом, но без других битов (т. Е. Это наименьшее отрицательное число).Двоичное представление -128 равно 10000000.Для других длин данных наименьшее отрицательное число в дополнении к двум всегда равно 1000... для правильного числа нулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...