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

JavaScriptの符号なし右シフト演算子(>>>)とは?意味と使い方を解説

JavaScriptの符号なし右シフト演算子(>>>)とは

符号なし右シフト演算子(>>>)は、通常の右シフト演算子(>>)と非常によく似たビット演算子ですが、決定的な違いが一つあります。それは、左側からシフトされて入ってくるビットが常にゼロ(0)であるという点です。つまり、空いた左側のビットには必ず0が埋められます。

通常の右シフト演算子(>>)では符号ビット(最上位ビット)が維持されるため、負の数をシフトすると左側に1が埋められます。一方、>>>は符号を考慮せずに常に0で埋めるため、オペランドが負の数であっても、結果は必ず正の整数になります。

使用例

以下のコードを実行して、符号なし右シフト演算子の実際の動作を確認してみましょう。ここでは、変数a(-14)を2ビットだけ右へシフトしています。

<html>
   <body>
      <script>
         var a = -14;
         var b = 2; // 2ビット右へシフト

         document.write("(a >>> b) => ");
         result = (a >>> b);
         document.write(result);
      </script>
   </body>
</html>

実行結果

(a >>> b) => 1073741820

-14を32ビットの2の補数表現で表すと「11111111 11111111 11111111 11110010」となります。これを>>>で2ビット右にシフトすると、左側には0が埋められ、「00111111 11111111 11111111 11111100」、すなわち1073741820という大きな正の整数が得られます。もし>>を使った場合は符号ビットが維持され、結果は-4になるため、両者の違いがよく分かります。

  1. JavaScriptのビット単位の右シフト(>>)演算子とは?仕組みと使い方を解説

    JavaScriptのビット演算子「>>」(右シフト演算子)は、数値を2進数のビット列として扱い、指定した桁数だけビットを右へずらすための演算子です。シフトによって右端からあふれたビットは切り捨てられ、その部分は考慮されません。ビット単位の右シフト(>>)の仕組み「a >> b」と記述すると、a のビット列が b 桁分だけ右に移動します。このとき、最も右側のビットから順に失われていきます。また、負の数の場合は符号を維持するために、左側には1が補われます(符号伝播シフトと呼ばれます)。右に1ビットシフトすることは、概ね「2で割る」ことと同じ意味を持ちます。例え

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

    右シフト演算子(>>)とはPythonにおける >> は右シフト演算子と呼ばれるビット演算子の一つです。この演算子は、第1オペランドを2進数(ビット列)として扱い、そのビットを第2オペランドで指定された桁数だけ右方向へ移動させます。シフトによって左側に空いた上位ビットには、すべて 0 が設定されます。つまり、正の整数に対しては符号が変わることなく値が半分ずつになっていくイメージです。基本的な動作イメージ数学的な観点で見ると、a >> n は「a を 2 の n 乗で割った商(小数点以下切り捨て)」と同じ結果になります。たとえば 100 >> 2