Я сейчас читаю книгу о "битовой игре", и появляется следующая формула:
x-y = x+¬y+1
Но это не похоже не работает. Пример:
x = 0100
y = 0010
x-y = 0010
¬y = 1101
¬y+1 = 1110
x+1110 = 10010
Но 10010! = 0010 ...
Где я сделал ошибку (если таковая была)?
(Книга называется « Hacker's Delight » Генри С. Уоррен.)
У вас только четырехбитная система! Этот лишний 1 слева от вашего окончательного результата не может существовать. Это должно быть:
x = 0100
y = 0010
~y = 1101
~y + 1 = 1110
x + 1110 = 0010
Другой бит переполняется и не является частью вашего результата. Вы можете прочитать арифметику с дополнением до двух .
Вы несете дополнительный бит. В реальных компьютерах, если вы переполняете слово, бит исчезает. (на самом деле он сохраняется во флаге переноса.).
Предположим, что числа ограничены 4 битами, тогда пятый 1
будет усечен, в результате останется 0010
.
Все дело в переполнении. У вас всего четыре бита, так что это не 10010, а 0010.
Чтобы добавить к ответам, в системе с дополнением до 2:
~x + 1 = -x
Скажите x = 2
. В 4 битах это 0010
.
~x = 1101
~x + 1 = 1110
И 1110
равно -2