ビット演算子 | Python入門

Pythonには他のプログラミング言語と同様、ビット演算子があります。

ビット演算子は整数にしか適用できません。

ここでは整数を表すのに少ない桁数の2進数を使っていますが、実際の整数型は多くのビットを持っています。そしてコンピューターは負の整数を表すのに2の補数表現を使うことを知っている必要があります。

ビット論理演算子

Pythonのビット論理演算子には次のものがあります。これらはビット単位で論理演算を実行します。

&
論理積(AND)
|
論理和(OR)
^
排他的論理和(XOR)
~
ビット反転

それぞれの演算はビット単位で次のようになります。

論理積の演算
左側被演算子右側被演算子論理積の結果
000
100
010
111

論理積では両方の被演算子が1のときだけ結果は1になります。

論理和の演算
左側被演算子右側被演算子論理和の結果
000
101
011
111

論理和は少なくと一方の被演算子が1なら結果は1になります。

排他的論理和の演算
左側被演算子右側被演算子排他的論理和の結果
000
101
011
110

排他的論理和はいずれか一方の被演算子が1のときに結果は1になります。

ビット反転の演算
被演算子ビット反転の結果
01
10

ビット反転は1なら0、0なら1になります。

0b0101(10進数で5)と0b0011(10進数で3)でのそれぞれの演算結果は次のようになります。

>>> 0b0101 & 0b0011
1
>>> 0b0101 | 0b0011
7
>>> 0b0101 ^ 0b0011
6
>>> ~ 0b0
-1
  

論理積の演算では結果は1(0b0001)、論理和での結果は7(0b0111)、排他的論理和での結果は6(0b0110)となります。0b0(10進数で0)はすべてのビットが0ですので、これを反転するとすべてにビットが1(つまり-1)になります。

ビットシフト演算子

シフト演算子には次のものがあります。

<<
左シフト
>>
右シフト

シフト演算はビットの桁を移動する操作です。

>>> 0b0001 << 2
4

2番目の被演算子は何桁シフトするかを指定します。この例では2桁左シフトするので結果は4(0b0100)になります。左シフトした後の空いた最下位のビットには0が充填されます。

>>> 0b0100 >> 2
1

右シフトの演算は右へビットをシフトします。右シフト演算では符号はそのまま保持するようにシフトします。つまり、2の補数表現で最上位ビットは符号を表す(正なら0、負なら1)ので、シフトした後の空いた最上位ビットには正なら0、負なら1が充てんされます。

更新日:

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.