いいえ、ビットごとの ANDであり、ブールのAND&
ではありません。ビットごとのANDは、オペランド値の個々のビットごとに、バイナリ レベルで機能します。
したがって、値 1 と 0 を使用すると、次のようになります。
1 & 1 == 1
1 & 0 == 0
0 & 1 == 0
0 & 0 == 0
ただし、バイナリで複数のビットで構成される整数値の場合、演算子は代わりに各ビット ペアで動作します。
2 & 1 == 0
2 & 2 == 2
この式& 0x10
は、5 番目のビットが設定されているかどうかをテストします。
0b00010000 & 0x10 == 0x10
0x10
(16 進数)、つまり 10 進数の 16 は 2 進数であるため00010000
です。0x20
は 6 番目のビット、0x40
は 7 番目、0x80
は左端または 8 番目のビットです。
コードは必要以上に冗長です。1 つのビットだけをテストする場合、オペレーターが返す0
か、テストされたビットと==
パーツを省くことができます。
def lcd_byte(bits, mode):
if bits & 0x10:
GPIO.output(LCD_D4, True)
if bits & 0x20:
GPIO.output(LCD_D5, True)
if bits & 0x40:
GPIO.output(LCD_D6, True)
if bits & 0x80:
GPIO.output(LCD_D7, True)
ビット演算がどのように機能するかの詳細については、ウィキペディアのビット演算に関する記事を参照してください。Python では、いくつかのビット演算子が定義されています。
&
: と
|
: また
^
: XOR
<<
: 左方移動
>>
: 右シフト