pyParallel蟒蛇交换针

问题描述:

所以我和并行端口相当新的,我已经在这里学习,这个代码 - >>http://pyserial.svn.sourceforge.net/viewvc/pyserial/trunk/pyparallel/examples/lcd.py?revision=49&view=markuppyParallel蟒蛇交换针

,我很困惑,到底是怎么回事这里

def reveseout(self, x): 
    r = ((x & (1<<0) and 1) << 7) |\ 
     ((x & (1<<1) and 1) << 6) |\ 
     ((x & (1<<2) and 1) << 5) |\ 
     ((x & (1<<3) and 1) << 4) |\ 
     ((x & (1<<4) and 1) << 3) |\ 
     ((x & (1<<5) and 1) << 2) |\ 
     ((x & (1<<6) and 1) << 1) |\ 
     ((x & (1<<7) and 1) << 0) 
    #print "%02x" % r, "%02x" %x 
    self.p.setData(r) 

我知道这是反转引脚,但我不明白语法本身以及它的字面意思。
任何帮助将不胜感激谢谢!

让我们一块一块地考虑:1<<n是一个向左移1位的位置,所以这些值给了我们0x01,0x02,0x04,0x08,0x10等位的一个字节。 x & (1<<n)被x掩码,所以我们得到x的个别位。 x & (1<<n) and 1是非常棘手的:如果该位设置在x中,则它将作为第二个参数进行计算,它将为1.如果该位未在x中设置,则它将为零。所以x & (1<<n) and 1如果该位设置为x,则为1,否则为0。

(x & (1<<n) and 1) << m取零或1,并将它移到左边的m个位置,所以它基本上复制第n位并将其放在第m位。八条线分别用0和7表示n和m,然后是1和6,然后是2和5等,所以我们得到8个值。首先是第七位的第0位,然后是第6位的第1位,依此类推。最后,它们全部或者与|一起构建一个单个字节,其位反转。