←目次
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' |