Python入門トップページ


目次

  1. プログラミング言語
  2. Anaconda - Jupyter Notebook / JupyterLab の環境設定
  3. Python の基礎
  4. リスト,タプル,辞書,集合
  5. 再び Jupyter Notebook の操作
  6. Python の制御構文
  7. 関数
  8. 便利な関数など
  9. リストの内包表記
  10. 多次元リスト
  11. クラス
  12. 演習問題
  13. 雑多な情報

Python の基礎

雑多な情報

シフト演算(左シフトと右シフト)を行う

目次に戻る

左シフト演算

左シフト演算はビットを左にずらして,空いた右端には「0」を入れる演算です.なお,シフト演算には論理シフトと算術シフトがありますが,ここでは論理シフトを考えています.

左シフトを実行するには << を使います.まず,1 ビット左にシフトします.


a = 0b01110101 # 117
print(bin(a))
print(bin(a << 1))
0b1110101
0b11101010

表示桁を揃えた方が理解しやすいかもしれません.


a = 0b01110101 # 117
print(f'{a:#010b}')
print(f'{a << 1:#010b}')
0b01110101
0b11101010

次に,3 ビット左にシフトします.


a = 0b01110101 # 117
print(bin(a))
print(bin(a << 3))
0b1110101
0b1110101000

なお,10 進数の世界で,100 を 1 桁左にずらすと 10 倍(= 10 の 1 乗倍)の 1000 になり,3 桁左にずらすと,1000 倍(= 10 の 3 乗倍)の 100000 になります.2 進数の世界では,1 ビット左にシフトすると,2 の 1 乗倍(つまり 2 倍)になり,3 ビット左にシフトすると 2 の 3 乗倍(つまり 8 倍)になります.実際に確かめてみましょう.117 を 1 ビット左シフトすると,234 (= 117 x 2) になります.


a << 1 # 2倍
234

117 を 3 ビット左シフトすると,936 (= 117 x 8) になります.


a << 3 # 8倍
936

目次に戻る

右シフト演算はビットを右にずらして,空いた左端には「0」を入れる演算です.なお,ここでも論理シフトを考えています.右シフト演算は >> を使います.


a = 0b11110101 # 245
print(bin(a))
print(bin(a >> 1))
0b11110101
0b1111010

表示桁数を揃えると,先頭に 0 が補われていることがよくわかります.なお,右端にあった 1 は切り捨てられていることにも注意してください.


a = 0b11110101 # 245
print(f'{a:#010b}')
print(f'{a >> 1:#010b}')
0b11110101
0b01111010

3 ビットの右シフト演算も行ってみます.


a = 0b11110101 # 245
print(f'{a:#010b}')
print(f'{a >> 3:#010b}')
0b11110101
0b00011110

1 ビットの左シフト演算が 2 倍になることと同様に, ビットの右シフト演算では 1/2 倍になります.つまり,245 を 1ビット右シフト演算すると 1/2 倍したあと切り捨てられて 122 になります.


a
245

a >> 1 # 1/2 倍
122

245 を 3 ビット右シフト演算すると,1/8 倍したあと切り捨てられて 30 になります.


a >> 3 # 1/8 倍
30

目次に戻る