理解Python按位,算术和布尔运算符

时间:2015-09-16 21:07:02

标签: python

我是Python的新手并且无法理解这一点。有人可以帮我打破声明吗?

n和奇偶校验都是整数

n += parity != n & 1

2 个答案:

答案 0 :(得分:5)

表达式评估为n += (parity != (n & 1)),结果为:

  • n & 1位掩码,它将整数n屏蔽为最低有效位。如果n为奇数,则为1,如果为偶数,则该位为0

  • parity != 0parity != 1生成布尔结果,TrueFalse,表示parity不是0等于右侧的1True

  • 生成的Falsen最新添加到n = n + True,就像您n = n + Falseint一样。 Python布尔类型是False子类0的整数值为True1的值为0

代码实质上是根据1的值将nparity添加到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 != 1parity部分;请注意,我认为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

最后,布尔值是整数:

import tkinter  #widget library ships with Python 
import Pmw      #allows access to update tkinter widgets

class TextBookGUI:
    # class constructor
    # populates each note book page
    def __init__(self, master):

        #place hash tables here

        """
         Create 5 pages on using Pmw notebook widget.
         Documenation for notebook:
         http://pmw.sourceforge.net/doc/NoteBook.html
        """

        self.nb = Pmw.NoteBook(master)
        Pmw.Color.changecolor(self.nb.component('hull'), background='blue')



        self.HomeTab = self.nb.add("Welcome")
        self.nb.tab('Welcome').focus_set()

        self.StudentTab = self.nb.add("Students")
        self.BookTab = self.nb.add("Books")
        self.LoanTab = self.nb.add("Loans")
        self.HelpTab = self.nb.add("Help")
        self.nb.pack(fill = 'both', expand = 1, padx = 10, pady = 10)
        self.nb.setnaturalsize()

        #format the house style of tabs: yellow bg and blue text   
        self.nb.component('Welcome-tab').configure(font= ('Helvetica', 7 ,'bold', 'italic'), width= 30,fg= "yellow", bg="blue")

该公式看起来正在计算CRC checksum

答案 1 :(得分: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)。

希望这有帮助!享受。