我正在尝试从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位被反转。