了解或非运算
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
我想知道 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