2015-09-16 55 views
0

我是Python新手,無法理解這一點。有人可以幫我分解這個聲明嗎?瞭解Python按位,算術和布爾運算符

兩個n和奇偶校驗是整數

n += parity != n & 1 
+0

什麼是'n'和'parity'定義爲? –

+0

我們可以得到這個代碼的一些上下文嗎?你對變量n和奇偶校驗是什麼類型有所瞭解嗎? –

+0

n和校驗位都是整數 –

回答

4

該表達式評估爲n += (parity != (n & 1)),結果是:

  • n & 1位掩碼,它掩蓋所述整數n下降到最不重要的位。如果n是奇數,則它將是1,如果是偶數,則該位將是0

  • parity != 0parity != 1產生布爾結果,TrueFalse,信令如果parity不等於右邊的01

  • 所得TrueFalse被加起來n,因爲如果你這樣做n = n + Truen = n + False。 Python布爾類型是的子類intFalse具有整數值0True1

的代碼,在本質上,在添加基於的parity01n並且如果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

0

讓我們打破這:

(n += (parity != (n & 1))) 

(n & 1)這是位掩碼,並採取最小的(至少顯著位)的n值。

parity !=如果parity是從(n & 1)

n +=結果這增加n通過任何值行的其餘部分將返回不同的這是真的。

n parity output(increment of n) 
0  1   1 
1  1   0 
1  0   1 
0  0   0 

從上表中可以看出它的功能類似於n的LSB和奇偶校驗的XOR。

注:通常奇偶校驗是數據包的奇怪(1)或均勻(0)。

希望這會有所幫助!請享用。