представлять отрицательное число с 2 'техникой дополнения? - PullRequest
9 голосов
/ 07 февраля 2012

Я использую 2 'дополнение для представления отрицательного числа в двоичной форме

Дело 1 : номер -5

В соответствии с техникой 2 'дополнения:

Преобразовать 5 в двоичную форму:

00000101, затем перевернуть биты

11111010, затем добавьте 1

00000001

=> результат: 11111011

Чтобы убедиться, что это правильно, я пересчитываю до десятичного числа:

-128 + 64 + 32 + 16 + 8 + 2 + 1 = -5

Дело 2 : номер -240

Те же шаги предприняты:

11110000

00001111

00000001

00010000 => recalculate this I got 16, not -240

Я что-то недопонимаю?

Ответы [ 3 ]

12 голосов
/ 07 февраля 2012

Проблема в том, что вы пытаетесь представить 240 только с 8 битами. Диапазон 8-битного числа со знаком от -128 до 127.

Если вместо этого вы представите его с 9 битами, вы увидите, что получите правильный ответ:

011110000 (240)

100001111 (flip the signs)
+
000000001 (1)

=

100010000

=

-256 + 16 = -240
4 голосов
/ 07 февраля 2012

Вы забыли, что -240 не может быть представлен 8 битами, когда он подписан?

3 голосов
/ 07 февраля 2012

Наименьшее отрицательное число, которое вы можете выразить с помощью 8 битов, равно -128, то есть 10000000.

Использование дополнения 2:

128 = 10000000
(flip) = 01111111
(add 1) = 10000000

Наименьшее отрицательное число, которое вы можете выразить с помощью N битов (разумеется, с целыми числами со знаком), всегда равно - 2 ^ (N - 1).

...