pyParallel python交换引脚

use*_*439 1 python parallel-processing

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

我对这里发生的事感到困惑

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)
Run Code Online (Sandbox Code Playgroud)

我理解它是反转引脚,但我不理解语法本身以及字面意思.
任何帮助将不胜感激谢谢!

Ned*_*der 6

让我们一点一点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设置,0如果不为1.

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