Select Language

AI Technology Community

2.4、Pythonシフト演算(左シフトと右シフト)

シフト操作は 2 を乗算または除算することと等価ですが、シフト演算の方が効率が高いため、2 の整数乗を乗算または除算する際にシフト操作を使用すると、コードの実行速度を向上させることができます。

シフト操作には左シフトと右シフトの 2 つの操作があります。左シフト操作は、元の操作数を 2n で除算した結果を得るのと等価で、右シフト操作は、元の操作数を 2n で乗算した結果を得るのと等価です。これらの操作はどちらも元の操作数の値を変更しません。

1. 左シフト操作(>>)

元の操作数を 2n で除算した結果を得るのと等価で、元の操作数は変化しません。

>>> 2 >> 1   # 2 を左に 1 ビットシフトした値を得る    
1            # 2 / 2 と等価
>>> 2 >> 2   # 2 を左に 2 ビットシフトした値を得る
0            # まず左に 1 ビットシフトして 1 を得て、その結果をさらに 2 で除算すると 0 になる

前の例からわかるように、左に 1 ビットシフトすると 2 で除算することと等価です。つまり、a >> 1 は a / 2 と等価です。n ビットシフトする場合は、n 回 2 で除算することと等価で、つまり a >> n は (((a >> 1) >> 1)...) >> 1 と等価です。

操作数が正の数の場合、左に 1 ビットずつシフトし続けると、最終的には必ず 0 になります。操作数が負の数の場合、左に 1 ビットずつシフトし続けると、最後に必ず 0 になるでしょうか?以下の例を見てみましょう。

>>> -8 >> 1   # 1 ビットシフトすると、2 で除算することと等価
-4          # -4 が得られる
>>> -8 >> 2   # 2 ビットシフトすると、結果 -4 をさらに 2 で除算することと等価
-2
>>> -8 >> 3   # 3 ビットシフトすると、結果 -2 をさらに 2 で除算することと等価
-1
>>> -8 >> 4   # 4 ビットシフトすると、結果 -1 をさらに 2 で除算することと等価
-1

-1 を左に 1 ビットシフトしても -1 のままであることがわかります。したがって、負の数を左にシフトし続けると、最終的には 0 ではなく -1 に留まります。

>>> -1 >> 100   # -1 を 100 ビットシフトする 
-1            # 依然として -1

2. 右シフト操作(<<)

元の操作数を 2n で乗算した結果を得るのと等価で、元の操作数は変化しません。

>>> 3 << 1      # 右に 1 ビットシフトすると、2 を乗算することと等価
6             # 6 が得られる
>>> -3 << 1   # 右に 1 ビットシフトすると、2 を乗算することと等価
-6


post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。