我是Python的新手,无法理解这一点。有人可以帮我分解一下吗?

n和奇偶校验都是整数

n += parity != n & 1

最佳答案

该表达式的计算结果为n += (parity != (n & 1)),结果为:


n & 1是位掩码,它将整数n掩码降低到最低有效位。如果n为奇数,则为1,如果为偶数,则该位为0
parity != 0parity != 1产生布尔结果TrueFalse,表示parity不等于右侧的01
产生的TrueFalse被加到n中,就像执行n = n + Truen = n + False一样。 Python布尔类型是int的子类,并且False的整数值是0,而True的值是1


从本质上讲,该代码基于0的值以及1当前是偶数还是奇数,将nparity添加到n

简短的演示可能会更好地说明这一点。

首先,n & 1产生01

>>> 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 != 0parity != 1部分;请注意,我假设parity仅限于01,它具有其他值确实没有任何意义:

>>> 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/

10-09 20:56