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)
Другие вопросы по тегам