Python NOR, возвращающий нечетные значения
Я пытаюсь получить NOR 2 значения
a = 0b1010
b = 0b0101
print(~ (a | b))
Токовый выход -16
, но если я сделаю это вручную
1010
OR 0101
--------
1111
NOT 1111
--------
0000
Итак, это должно дать значение 0
не -16
, Почему это делает это? Как я могу это исправить?
1 ответ
Решение
Эти операции выполняются с 32-разрядными целыми числами (или с 64-разрядными целыми числами в 64-разрядной версии Python).
0000 0000 0000 0000 0000 0000 0000 1010
OR 0000 0000 0000 0000 0000 0000 0000 0101
------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1111
NOT 0000 0000 0000 0000 0000 0000 0000 1111
-------------------------------------------
1111 1111 1111 1111 1111 1111 1111 0000
Которое, взятое в качестве целого числа со знаком, является представлением -16 для дополнения до двух, потому что вам нужно добавить 16, чтобы достичь нуля (и переноса).
Чтобы это исправить, явно выполните xor с помощью 0b1111
Вместо того, чтобы использовать ~
,
print((a | b) ^ 0b1111)