что говорит книга, когда написано "-1 = $ FF"?
Если рассматривать только байт, то дополнение 1
к двум является 0xff
(или $FF
, если использовать этот формат для шестнадцатеричных чисел).
Чтобы разбить его, дополнение (или дополнение) 1
равно 0xfe
, затем вы добавляете 1
, чтобы получить дополнение к двум: 0xff
Аналогично для 2
: дополнение 0xfd
, добавьте 1
, чтобы получить дополнение к двум: 0xfe
Теперь давайте посмотрим на 17 десятичных. Как вы говорите, это 0x11
. Дополнение - 0xee
, а дополнение двух - 0xef
- все, что согласуется с тем, что вы указали в своем вопросе.
Теперь поэкспериментируйте с тем, что происходит, когда вы складываете числа вместе. Первый в десятичном виде:
17 + (-17) == 0
Теперь в гексе:
0x11 + 0xef == 0x100
Поскольку мы имеем дело с числовыми объектами, размер которых составляет всего один байт, 1
в 0x100
отбрасывается (некоторые размахивают здесь рукой ...), и мы получаем:
0x11 + 0xef == 0x00
Чтобы справиться с «размахиванием руками» (к сожалению, я, вероятно, не буду делать это понятным образом): начиная с флага переполнения (OF
или иногда называется V
по причинам, которые я не знаю) совпадает с флагом переноса (C
), перенос может быть проигнорирован (это указывает на то, что подписанная арифметика произошла правильно). Один способ думать об этом, который, вероятно, не очень точен, но я считаю полезным, состоит в том, что начальные числа в номере дополнения отрицательного числа два «совпадают» с ведущими нулями в неотрицательном числе дополнения числа два.