←目次
python,Qiita初心者なので、備忘録として記載していきます。
なにせ初心者なので、知識不足はご容赦ください。
知識を深めながら追記していきたいと思います。
ビット演算子とは
基本
- 整数でのみ利用可能
- 整数に対してビット単位で論理演算を行う演算子
- 2進数で表した整数型の値の各ビットに対して、それぞれ論理積、論理和、排他的論理和、ビット反転、ビットシフトを行う
・ビットとは二つの選択肢から一つを特定する情報量の最小単位
※語源は "[ bi ]nary digi[ t ]" (二進法の数字)
・整数を2進数で表示したときの一桁、一桁のことをビット(bit)という
・2進数なので必ず0か、1になっており、2進数の桁ごとに論理演算することをビット演算という
以下の演算子がある
| 演算子 | 式 | 説明 |
|---|---|---|
| & | a & b | AND:論理積(aもbも1のビットが1) |
| | | a | b | OR:論理和(aまたはbが1のビットが1) |
| ^ | a ^ b | XOR:排他的論理和(aまたはbが1のビットが1) |
| ~ | ~ b | ビット反転 |
| >> | a >> b | b ビット右シフト |
| << | a << b | b ビット左シフト |
論理積(AND)、論理和(OR)、排他的論理和(XOR)の各ビットに対する入力と出力の関係は以下の表の通り
| 入力a | 入力b | AND | OR | XOR |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 |
| 0 | 0 | 0 | 0 | 0 |
AND(論理積):& 演算子
>>> 1 & 1
1
OR(論理和):| 演算子
>>> 1 | 1
1
XOR(排他的論理和):^ 演算子
>>> 1 ^ 1
0
ビット反転:~ 演算子
>>> ~ 1
-2
# 単純に各ビットを反転した値ではなく、~aは-(a+1)となる値を返す
ビット右シフト:>> 演算子
指定した桁だけ右にずらして、最下位より先に押し出されたビットは消える
| 入力 | 出力 | 2進数 |
|---|---|---|
| 5>>0 | 5 | '0b101' |
| 5>>1 | 2 | '0b10' |
| 5>>2 | 1 | '0b1' |
| 5>>3 | 0 | '0b0' |
ビット左シフト:<< 演算子
ビット左シフト:<< 演算子指定した桁だけ左にずらして、空いたビットには0が入る
| 入力 | 出力 | 2進数 |
|---|---|---|
| 5<<0 | 5 | '0b101' |
| 5<<1 | 10 | '0b1010' |
| 5<<2 | 20 | '0b10100' |
| 5>>3 | 40 | '0b101000' |