今回はPythonでビット演算子の論理和に触れるの続き。
前回見たコードには続きがあって、
n = 0 cmdout = n cmdout |= 0x18 cmdout <<= 3 b = cmdout & 0x80
最後の行で&(アンバサンド)の演算子で計算している。
&は論理積ANDであって、二つの値 x と y があった場合、
x | y | and |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
両方とも 1 の場合に 1 となる。
冒頭のコードに格納された値を見ていくと
cmdout <<= 3
までの処理で変数cmdoutに格納された値は、192 (0b11000000)になる。
※頭文字に0bを付けると2進数の表現になる。
b = cmdout & 0x80
の行では、0x80 は0b10000000 で 124 になるので、
# 11000000 & 10000000 11000000 and 10000000 ------------------ 10000000
になる。
この計算が何を意味しているのか?はまだ分からないが、SPIでデータを送受信する時に8ビットの値をシフト演算で読み取っていく必要があるのだなということはわかった。
ちなみにCPUの説明等でよく見られる論理積は
のように描かれる。