Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの右シフト演算子(>>)とは?仕組みと使い方をわかりやすく解説

右シフト演算子(>>)とは

Pythonにおける >>右シフト演算子と呼ばれるビット演算子の一つです。この演算子は、第1オペランドを2進数(ビット列)として扱い、そのビットを第2オペランドで指定された桁数だけ右方向へ移動させます。

シフトによって左側に空いた上位ビットには、すべて 0 が設定されます。つまり、正の整数に対しては符号が変わることなく値が半分ずつになっていくイメージです。

基本的な動作イメージ

数学的な観点で見ると、a >> n は「a を 2 の n 乗で割った商(小数点以下切り捨て)」と同じ結果になります。たとえば 100 >> 2100 ÷ 4 = 25 と一致します。

実際のコード例

次の例では、変数 a に 100 を代入し、2ビット分だけ右へシフトしています。

>>> a = 100
>>> bin(a)      # 2進数表現:0110 0100
'0b1100100'
>>> b = a >> 2  # 2ビット右シフト:0001 1001
>>> b
25
>>> bin(b)
'0b11001'

bin() 関数を使うと、整数を2進数表現の文字列として確認できます。元の値 1000b1100100)のビットを2つ右にずらすと、0b11001、つまり 25 になります。

右シフト演算子の主な用途

  • 高速な除算: 2のべき乗で割る計算を、剰余演算よりも高速に行えます。
  • フラグやステータスの処理: ビット単位で状態を管理する際に、特定のビットを取り出すために使われます。
  • 組み込み・低レベルプログラミング: ハードウェア制御や通信プロトコルの実装など、ビット操作が必要な場面で活躍します。

なお、負の数に対する右シフトは算術シフトとして動作し、上位ビットには符号を維持するための 1 が設定される点にも注意してください。

  1. Pythonの「not in」演算子とは?使い方と動作をわかりやすく解説

    Pythonには、要素があるシーケンス(リスト・タプル・文字列など)に含まれていないことを判定するための「not in」というメンバーシップ演算子が用意されています。 not in 演算子は、指定したシーケンスの中に変数が見つからない場合に True を返し、見つかった場合は False を返します。以下に具体的な例を示します。 >>> a = 10 >>> b = 4 >>> l1 = [1,2,3,4,5] >>> a not in l1 True >>> b not in l1 False この例で

  2. Pythonのドット(.)とは?属性やメソッドへのアクセス方法をわかりやすく解説

    Pythonにおける「ドット(.)」の基本 Pythonでは、ほぼすべての要素がオブジェクトとして扱われます。そして、すべてのオブジェクトには、それぞれ固有の属性(アトリビュート)とメソッドが備わっています。オブジェクトと、それらの属性やメソッドとをつなぐ役割を果たすのが、「ドット(.)」という記号です。 具体例:Dogクラスを使って理解しよう 例えば、「Dog(犬)」というクラスがあるとします。このとき、Fidoという名前の犬は、Dogクラスのインスタンス(オブジェクト)に相当します。 class Dog: pass Fido = Dog() このクラスに eats()(食べ