ryubloblog’s diary

宮城県の仙台で働くプログラマーです。

【Python】bit演算 `&`(論理積, AND)演算子の豆知識

今回はbit演算で使用できる&演算子についての豆知識的なのをまとめていきたいと思います。

&演算子とは

簡単にまとめると比較対象を2進数で表した時に同じ桁数が1であれば1を返し、そうでない場合(0の時)は0を返すといった感じになります。

3 & 2の場合
3 = 011
2 = 001
---------
1 = 001

6 & 4の場合
6 = 110
4 = 100
---------
4 = 100

偶奇判定

偶奇を判定するプログラムで&演算子を使用してみると、こいつ知ってるな感が出ます。
ただし、言語によってはand(かつ)を表す&&があり読み手が勘違いする場合もあるので、使用する場合には自己責任でお願いいたしますー

if x & 1:
  # 奇数処理
else:
  # 偶数処理

シフト演算子との利用

これは主にbit全探索の実装の際に使用する書き方ですが、簡単にまとめると1と0のフラグ判定処理みたいなイメージになります。
下記bit全探索の実装から抜き出したものになります。

if (i >> j) & 1:
  # フラグが立っている場合の処理

具体的な数値で見てみましょう。

・i = 5, j = 1の場合
5(101)を右に1シフトしてANDを取ります。
-> 010になります。
よって010 & 001(1)をすると000になります
つまりフラグが立っていないことがわかります。

・i = 5, j = 2の場合
5(101)を右に2シフトしてANDを取ります。
よって001 & 001をすると001になります。
つまりフラグが立っていることがわかります。

最後に

実際、Web開発現場でbit演算や2進数を意識して実装をしなければならない状況にはなったことがないので、使用することは少ないかと思われますが「へー」くらいで流していただければと思いますー