Python3でビット演算
全列挙や集合で役に立つビット演算についてまとめ。しばらく勘違いしていたけど、いちいち二進数に変換するコードを書かなくても、整数値に対して演算を行うことが出来る。このことに気づいていなくてしばらく回りくどいコードを書いていた。ビット演算子の取り扱い例はABC014B など。
1.AND
比較する二つの数の内、2進標記で同じ桁が両方とも1なら1を、それ以外では0を返す。
5 & 17
5と17の2進標記はそれぞれ0b101, 0b10001なので、上記の演算結果としては0b00001となり、10進標記で1が返される。
2. OR
桁を比較したときに少なくとも一方が1であれば1を、それ以外では0を返す。
5 | 17
今度は演算結果として0b10101となるので、10進標記で21が返される。
3. XOR
桁を比較したときに、片方だけでセットされているビットを返す。つまり(1, 1), (0, 0)の場合は0を返し、(1, 0)の時は1を返す。
5 ^ 17
演算結果は0b10100になるので、10進標記で20を返す。
4. ビット反転
全てのビットを反転する。
~5
Pythonの場合000...0101が反転して111...1010になるそう。これが10進で出力されると-6になるらしが、理屈がまだよくわかっていません...
5. シフト
左、ないし右にビットを動かす。
5 << 1 17 >> 2
それぞれ5を左に1ビット分シフト、17を右に2ビット分シフトとなり、10進標記で10(0b1010), 4(0b100)が出力される。