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