今回はPythonでビット演算子の論理和に触れるの続き。

前回見たコードには続きがあって、

n = 0
cmdout = n
cmdout |= 0x18
cmdout <<= 3
b = cmdout & 0x80

最後の行で&(アンバサンド)の演算子で計算している。

&は論理積ANDであって、二つの値 x と y があった場合、

xyand
111
100
010
000

両方とも 1 の場合に 1 となる。

論理積 - Wikipedia




冒頭のコードに格納された値を見ていくと

cmdout <<= 3

までの処理で変数cmdoutに格納された値は、192 (0b11000000)になる。

※頭文字に0bを付けると2進数の表現になる。


b = cmdout & 0x80

の行では、0x80 は0b10000000 で 124 になるので、

# 11000000 & 10000000
		11000000
  and	10000000
------------------
		10000000

になる。


この計算が何を意味しているのか?はまだ分からないが、SPIでデータを送受信する時に8ビットの値をシフト演算で読み取っていく必要があるのだなということはわかった。


ちなみにCPUの説明等でよく見られる論理積は

のように描かれる。