Да, вычитание работает так, как вы надеетесь.Вам не нужно делать ничего особенного, чтобы справиться с опрокидыванием.Для вашего примера раз вычитание хорошо себя ведет:
00000101 - 11111100 == 00001001
(5) - (252) == (9)
Или:
(5+256) - (252) == (9)
См. Этот тест Python, чтобы доказать это:
>>> all((j - i) & 0xFF == ((j & 0xFF) - i) & 0xFF
... for i in range(256)
... for j in range(i, i + 256))
True
The j & 0xFF
term будет меньше, чем i
когда j > 255
.Это не влияет на 8-битные результаты;это показывает, что эти значения по-прежнему соответствуют результатам, когда j
не маскируется до 8 бит.