我是Python的新手,无法理解这一点。有人可以帮我分解一下吗?
n和奇偶校验都是整数
n += parity != n & 1
最佳答案
该表达式的计算结果为n += (parity != (n & 1))
,结果为:n & 1
是位掩码,它将整数n
掩码降低到最低有效位。如果n
为奇数,则为1
,如果为偶数,则该位为0
。parity != 0
或parity != 1
产生布尔结果True
或False
,表示parity
不等于右侧的0
或1
。
产生的True
或False
被加到n
中,就像执行n = n + True
或n = n + False
一样。 Python布尔类型是int
的子类,并且False
的整数值是0
,而True
的值是1
。
从本质上讲,该代码基于0
的值以及1
当前是偶数还是奇数,将n
或parity
添加到n
。
简短的演示可能会更好地说明这一点。
首先,n & 1
产生0
或1
:
>>> n = 10 # even
>>> bin(n) # the binary representation of 10
'0b1010'
>>> n & 1 # should be 0, as the last bit is 0
0
>>> n = 11 # odd
>>> bin(n) # the binary representation of 11
'0b1011'
>>> n & 1 # should be 1, as the last bit is 1
1
接下来,
parity != 0
或parity != 1
部分;请注意,我假设parity
仅限于0
或1
,它具有其他值确实没有任何意义:>>> parity = 0
>>> parity != 1
True
>>> parity != 0
False
>>> parity = 1
>>> parity != 1
False
>>> parity != 0
True
最后,该布尔值是整数:
>>> isinstance(True, int)
True
>>> int(True)
1
>>> 10 + True
11
>>> 10 + False
10
该公式似乎正在计算CRC checksum。
关于python - 了解Python按位,算术和 bool 运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32618712/