0
A
回答
4
該表達式評估爲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
。
的代碼,在本質上,在添加基於的parity
值0
或1
到n
並且如果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。
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)。
希望這會有所幫助!請享用。
相關問題
- 1. 按位算術和運算符
- 2. 布爾運算符的位運算符
- 3. 布爾運算VS位運算符
- 4. 按位運算的結果和布爾
- 5. 瞭解按位運算 - 移位和AND
- 6. 位運算符算術
- 7. Python的布爾和邏輯運算符
- 8. Python:無符號32位按位算術
- 9. 不使用算術運算或按位運算符的加法
- 10. 布爾運算符++
- 11. 使用布爾邏輯「和」按位運算符「&」
- 12. 算術運算符
- 13. Python中的布爾運算符
- 14. Python的就地布爾運算符
- 15. 的Python 2.7布爾運算符邏輯
- 16. 奇怪的Python的布爾運算符
- 17. JavaScript和按位運算符
- 18. 瞭解'&'運算符
- 19. 布爾運算符和邏輯運算符
- 20. 布爾運算符和雙運算符重載
- 21. matlab布爾運算符
- 22. SQL Server布爾運算符
- 23. 布爾運算符問題
- 24. 與布爾運算符
- 25. 布爾賦值運算符
- 26. Thymeleaf - 布爾運算符
- 27. 與布爾運算符
- 28. 布爾賦值運算符
- 29. 與布爾運算符
- 30. 爲布爾運算符
什麼是'n'和'parity'定義爲? –
我們可以得到這個代碼的一些上下文嗎?你對變量n和奇偶校驗是什麼類型有所瞭解嗎? –
n和校驗位都是整數 –