X-y = x + ¬y + 1 проблема

В настоящее время я читаю книгу о "бит-фридзинге" и появляется следующая формула:

x-y = x+¬y+1

Но это, похоже, не работает. Пример:

x = 0100  
y = 0010  
x-y = 0010  
¬y = 1101  
¬y+1 = 1110  
x+1110 = 10010  

Но 10010 != 0010...

Где я совершил ошибку (если есть)?

(Книга "" Хакерский восторг" Генри С. Уоррена.)

Ответ 1

У вас есть только четырехбитная система! Это лишнее 1 слева от вашего окончательного результата не может существовать. Это должно быть:

x  = 0100
y  = 0010
~y = 1101
~y + 1 = 1110
x + 1110 = 0010

Другой бит переполняется и не является частью вашего результата. Вы можете прочитать две арифметики дополнения.

Ответ 2

У вас есть дополнительный бит. В реальных компьютерах, если вы переполняете слово, бит исчезает. (на самом деле он сохраняется в флагом переноса.).

Ответ 3

Предполагая, что числа ограничены 4 битами, пятый 1 будет усечен, оставив вас с 0010.

Ответ 4

Это все о переполнении. У вас всего четыре бита, поэтому он не 10010, а 0010.

Ответ 5

Просто добавьте ответы в систему с двумя дополнениями:

~x + 1 = -x

Скажите x = 2. В 4 битах это 0010.

~x = 1101
~x + 1 = 1110

И 1110 равно -2