目次
▼ Python3.6がインストールされていること。
このページでは、venvの仮想環境(Python3.6)上にNumPyをインストールした環境で、Python対話モード(Pythonインタプリタ)にて実装サンプルを記載している。
※ Python対話モードについては下記を参考。
Python対話モード:[Python] 対話モード (インタプリタ) の使用方法
| 演算子 | 説明 |
|---|---|
| a | b | aとbのビット単位の論理和 |
| a ^ b | aとbのビット単位の排他的論理和 |
| a & b | aとbのビット単位の論理積 |
| ~ a | aのビット単位の反転(否定) |
| a << b | aをbビット分、左にシフト |
| a >> b | aをbビット分、右にシフト |
$ python
>>>
>>> # 0100 の 末尾2桁 を 1 (ON) にする
>>> bit_a = 0b0100
>>> bit_b = 0b0111
>>> bit_c = bit_a | bit_b
>>>
>>> # 演算結果 (10 進数)
>>> print(bit_c)
7
>>> # 演算結果 (2 進数)
>>> print(bin(bit_c))
0b111
>>>
$ python
>>>
>>> # 1111 の 先頭 2桁 は 0 (OFF)に、末尾2桁 は 1 (反転)とする。
>>> bit_a = 0b1111
>>> bit_b = 0b1100
>>> bit_c = bit_a ^ bit_b
>>> # 演算結果 (10 進数)
>>> print(bit_c)
3
>>> # 演算結果 (2 進数)
>>> print(bin(bit_c))
0b11
>>>
$ python
>>>
>>> # 1111 の 末尾3桁 を 0 (OFF) にする
>>> bit_a = 0b1111
>>> bit_b = 0b1000
>>> bit_c = bit_a & bit_b
>>>
>>> # 演算結果 (10 進数)
>>> print(bit_c)
8
>>> # 演算結果 (2 進数)
>>> print(bin(bit_c))
0b1000
>>>
$ python
>>>
>>> # 0b0101 を反転する
>>> bit_a = 0b0101
>>> bit_b = ~bit_a
>>> # ① 演算結果 (10 進数) ※ - ( a + 1 ) と一致
>>> print(bit_b)
-6
>>> # ② 演算結果 (2 進数) ※ - ( a + 1 ) と一致
>>> print(bin(bit_b))
-0b110
>>>
$ python
>>>
>>> # 0b0101 を単純反転する (排他的論理和)
>>> bit_a = 0b0101 ^ 0b1111
>>> print(bin(bit_a))
0b1010
>>> # 0b1010 の補数を求める
>>> bit_b = 0b10000 - bit_a
>>> print(bin(bit_b))
0b110
>>> # 0b110 に -1 を掛ける(符号反転)
>>> bit_c = -1 * bit_b
>>> # ① 演算結果 (10 進数) ※ - ( a + 1 ) と一致
>>> print(bit_c)
-6
>>> # ② 演算結果 (2 進数) ※ - ( a + 1 ) と一致
>>> print(bin(bit_c))
-0b110
>>>
$ python
>>>
>>> # 0b10101111(10 進数で175)を左に2シフトする
>>> bit_a = 0b10101111
>>> bit_b = bit_a << 2
>>> # 演算結果 (10 進数)
>>> print(bit_b) # 175の4(2の2乗)倍となる
700
>>> # 演算結果 (2 進数)
>>> print(bin(bit_b)) # 左に2シフトし、空白となった右側の2桁は 0 となる
0b1010111100
>>>
$ python
>>>
>>> # 0b10000000(10 進数で128)を右に2シフトする
>>> bit_a = 0b10000000
>>> bit_b = bit_a >> 2
>>> # 演算結果 (10 進数)
>>> print(bit_b) # 128の1/4(2のマイナス2乗)倍となる
32
>>> # 演算結果 (2 進数)
>>> print(bin(bit_b)) # 右に2シフトし、最下位より右に溢れたビット(00)は破棄となる
0b100000
>>>
>>> # ※割り切れない場合
>>> # 0b10101111(10 進数で163)を右に2シフトする
>>> bit_c = 0b10100011
>>> bit_d = bit_c >> 2
>>> # 演算結果 (10 進数)
>>> print(bit_d) # 割り切れない場合、小数点第1位を四捨五入
40
>>> # 演算結果 (2 進数)
>>> print(bin(bit_d)) # 右に2シフトし、最下位より右に溢れたビット(11)は破棄となる
0b101000
>>>