了解或非运算

Understanding NOR operation

我想知道 NOR 操作背后的逻辑。假设我们要对输入 1、1(十进制基数)

进行或非运算

这相当于1,它在二进制基数中仍然是1所以NOR运算实际上应该是0table。

然而,在Python中,写作:

~(1 | 1)

产生 -2 作为结果,而不是 0。这与签名数字有关吗?即使输入是十进制基数而不是二进制补码或无符号二进制,它仍然适用吗?

在python中,整数表示为 2s 补码(任意大)位串。所以数字 1 实际上是位串 ...0000001 —— 最低有效位是 1,其余位都是 0。当您执行按位操作(例如 | 或 ~)时,它们会并行操作所有位。所以 ~(1 | 1) 是:

    ...00000001
    ...00000001
 or -----------
    ...00000001
not -----------
    ...11111110

最终值(最低位 0,其余所有 1)是 -2 的二进制补码表示,因此这就是打印的内容。

如果您想要一位输出(例如 0 或 1),您可以将 & 1 应用于(完整)表达式以有效地提取(仅)最低有效位:

 >>> (~(1 | 1)) & 1
 0