1

だから私はパラレルポートにかなり慣れていて、ここでこのコードを研究してきました->> 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)

ピンを逆にすることは理解していますが、構文自体とそれが文字通り何を言っているのか理解していません。
どんな助けでも大歓迎ですありがとう!

4

1 に答える 1

6

1 つずつ見ていきましょう: 1<<nは 1 が n 桁左にシフトされているため、これらの値は 0x01、0x02、0x04、0x08、0x10 など、バイト内のビットを示します。 x & (1<<n)x はそのビットでマスクされるため、x の個々のビットを取得します。 x & (1<<n) and 1注意が必要です: ビットが x に設定されている場合、2 番目の引数として評価され、1 になります。ビットが x に設定されていない場合、ゼロになります。ビットx & (1<<n) and 1が x に設定されている場合は 1、設定されていない場合は 0 です。

(x & (1<<n) and 1) << mそのゼロまたは1を取り、それを左のm桁にシフトするため、本質的にn番目のビットをコピーしてm番目のビットに入れます。8 行は n と m に 0 と 7 を使用し、次に 1 と 6、次に 2 と 5 などを使用するため、8 つの値が得られます。最初は 7 位の 0 番目のビット、次に 6 位の 1 番目のビットなどです。|最後に、ビットを反転させて 1 バイトを構築するために、すべての論理和が一緒に取られます。

于 2012-07-10T02:49:27.507 に答える