我正在尝试理解 an answer I received earlier today 中的代码:
a=0b01100001
b=0b01100010
bin((a ^ 0b11111111) & (b ^ 0b11111111))
这是我的理解:
bin表示结果将是二进制形式。a是通过门的进程0b表示 base 2 形式
有人能解释一下其余的吗?我对 11111111 感到困惑。 & 是和门(混淆了为什么这将两者分开)。您将如何更改它以适用于任何其他门,例如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 位被反转。
