今回のビット否定(反転:NOT)はPythonでビット演算子の排他的論理和に触れるの記事で触れた排他的論理和のXORと同様、目的であるSPI通信のコードの解読とは関係ないけれども、せっかくの機会なので触れておく。


ビット否定 NOT は ~ の演算子を用いる。

NOTはビットの反転を行う。

xnot
10
01

早速、13 (0b1101)のビット否定を試してみる。

先に予想される結果を載せておくと

# ~ 0b1101
1101
-----
0010 

0b0010なので、10進数で2になるはず。


それでは実際にコードを作成して試してみる。

a = 13 # 0b1101
n = ~a
print(n)
print(bin(n))

結果は10進数で -14、2進数では -0b1101になった。

Pythonでは整数の桁数が無制限という仕様であるらしいので、シフト演算と聞いて予想される計算方法ではなくなるらしい。


ちなみにCPUの説明等でよく見られるビット否定は

symbol_not

のように描かれる