我正在尝试从an answer I received earlier today理解代码:

a=0b01100001
b=0b01100010

bin((a ^ 0b11111111) & (b ^ 0b11111111))


这是我的理解:


bin表示结果将为二进制形式。
a是正在经历的过程
0b表示以2为底的形式


有人可以解释一下吗?我对11111111感到困惑。 &是and门(混淆为什么将两者分开)。以及如何将其更改为适用于其他任何门,例如XOR,NAND或...?

最佳答案

a ^ 0b11111111      #exclusive or's each bit in a with 1, inverting each bit

>>> a=0b01100001
>>> bin(a ^ 0b11111111)
'0b10011110'

>>> bin((a ^ 0b11111111) & (b ^ 0b11111111))
'0b10011100'


这与使用〜运算符不同,因为〜返回负的二进制结果。

>>> bin(~a & ~b)
'-0b1100100


原因是〜运算符会将用于表示数字的所有位(包括通常不显示的前导0)取反,从而导致2的补码否定结果。通过使用^和8位二进制掩码,仅前8位被反转。

09-11 17:30