home changes contents help options

173:ビット演算を行う

ビット単位 AND

ビット単位 AND を求めるには & 演算子を用います。

>>> 12 & 10
8
     1100
AND  1010
=    1000

ビット単位 OR

ビット単位 OR を求めるには | 演算子を用います。

>>> 12 | 10
14
     1100
OR   1010
=    1110

ビット単位 XOR

ビット単位 XOR を求めるには ^ 演算子を用います。

>>> 12 ^ 10
6
     1100
XOR  1010
=    0110

ビット単位 NOT

ビット単位 NOT を求めるには ~ 演算子を用います。

>>> ~3
-4
NOT 0011
=   1100

シフト演算

左シフトは << 演算子、右シフトは >> 演算子を用います。右シフトであふれたビットは捨てられます。

>>> 7 << 1
14
>>> 7 >> 1
3
LEFT-SHIFT  0111
=           1110

RIGHT-SHIFT 0111
=           0011

おまけ

リファレンスマニュアルによると ~x は -(x+1) と定義されています。 また、n ビットの右シフト演算は pow(2,n) による除算、左シフトは pow(2,n) との乗算という定義です。

実際に Python 2.5 では 長整数型 のビット単位反転はビット演算ではなく、 1 を加えて符号反転で実装されていることが Object/longobject.c の long_invert 関数にて確認できます。