2017-02-15 9 views
0

Попытка понять, почему ~8 является .Что я делаю неправильно с дополнением 2?

Моя неправильная математика выглядит следующим образом:

1.) 8 в двоичном виде 1000.
2.) Инвертировать все биты: 0111.
3.) Добавить 1: 1000.

.... и теперь у меня есть то же самое, с чего я начал. Что я здесь делаю неправильно?

+0

Другими словами: '1000' является' -8' в виде дополнения до двух. –

ответ

4

Четыре бита могут представлять только -8 .. 7 в дополнении. Чтобы выполнить свою математику на 8, вам понадобится как минимум пять бит.

Что вы здесь сделали, это переполнение, так как ваше значение 8 изначально кодируется как в любом случае.

Вот переработанная версия:

8 = 01000 
~8 = 10111 
+1 = 11000 

Вторичный компонент, который 1000, который когда перевернутый является 0111, что 7 и 7 + 1, что составляет смещение, ставит вас обратно на 8.

+0

Oh .... так что это должно быть '01000', которое становится' 10111', а затем '11000' .... но как же это -9? мне кажется 8, если первый бит указывает на отрицательный. – Aerovistae

+2

Время для посещения [страницы курса краха Wikipedia] (https://en.wikipedia.org/wiki/Two's_complement). Если первый бит установлен, что означает «отрицательный», а затем значение всех последующих бит инвертируется. – tadman

+0

А я думаю, что понял. Но вы имеете в виду, что смысл всех последующих бит инвертируется *, а затем вы вычитаете 1 *, правильно? Это единственное, что могло бы понять диаграмму «Трехбитовых целых чисел с двумя дополнениями» в верхнем правом углу страницы вики. – Aerovistae

1

Давайте работать в 8 бит.

8 = 00001000 
9 = 00001001 

~8 = 11110111 Inverse of 8 

Теперь давайте сделаем дополнение 2 по 9 получить

00001001 9 
11110110 Inverse 
11110111 Add 1 
-9 = 11110111 

Обратите внимание, что ~8 = -9