pyParallel python交换引脚

时间:2012-07-10 02:42:46

标签: python parallel-processing

所以我对并行端口很新,我一直在研究这段代码 - >> http://pyserial.svn.sourceforge.net/viewvc/pyserial/trunk/pyparallel/examples/lcd.py?revision=49&view=markup

我很困惑这里发生了什么

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 个答案:

答案 0 :(得分:6)

让我们一块一块:1<<n左移1个n位,所以这些值给出了0x01,0x02,0x04,0x08,0x10等位,字节。 x & (1<<n)被x掩盖了该位,因此我们得到x的各个位。 x & (1<<n) and 1很棘手:如果该位在x中设置,那么它将作为第二个参数进行计算,它将为1.如果该位未在x中设置,则它将为零。因此,如果该位在x中设置,则x & (1<<n) and 1为1,否则为0。

(x & (1<<n) and 1) << m取零或一个并将其移到左边的m个位置,因此它基本上复制了第n个位并将其置于第m位。八行使用0和7表示n和m,然后是1和6,然后是2和5等,因此我们得到8个值。第一个是第7位的第0位,然后是第6位的第1位,依此类推。最后,它们全部或与|一起构建一个字节,反转位。