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

JavaScriptのビット演算子入門|NOT(~)・左シフト(<<)・右シフト(>>)をわかりやすく解説


JavaScriptのビット否定演算子(Bitwise NOT:~)

チルダ記号(~)を使うビット否定演算子は、数値を32ビットの2進数として扱い、すべてのビットを反転させる演算です。「0」は「1」に、「1」は「0」に変わります。JavaScriptでは ~x の結果は必ず -(x + 1) と等しくなるという特徴があります。

コード例

<html>
<body>
<p id="not"></p>
<script>
   document.getElementById("not").innerHTML = ~ 13;
</script>
</body>
</html>

出力結果

-14

解説

10進数の13は2進数で「1101」と表されます。これを反転すると「…11110010」(上位のビットはすべて1)となり、2の補数表現では -14 を意味します。「~13 = -(13 + 1) = -14」という公式で覚えておくと実務でも役立ちます。

JavaScriptの左シフト演算子(<<)

左シフト演算子 << は、ビット列を指定した桁数だけ左へ移動させ、空いた右側のビットには0を埋め込みます。数学的には「2のn乗倍する」操作に相当します。

コード例

<html>
<body>
<p id="left"></p>
<script>
   document.getElementById("left").innerHTML = 5 << 2;
</script>
</body>
</html>

出力結果

20

解説

5は2進数で「0101」です。これを2桁だけ左へシフトすると「010100」となり、10進数に直すと 20 になります。つまり 5 << 25 × 4(= 5 × 2²)と同じ結果です。

JavaScriptの右シフト演算子(>> と >>>)

右シフト演算子は左シフトとは逆に、ビットを右へ移動させます。>>(符号付き右シフト)は左端の符号ビットを維持して埋め、>>>(符号なし右シフト)は常に0で埋めます。正の数であればどちらも同じ結果となり、「2のn乗で割って小数点以下を切り捨てた値」に相当します。

コード例

<html>
<body>
<p id="right"></p>
<script>
   document.getElementById("right").innerHTML = 5 >>> 2;
</script>
</body>
</html>

出力結果

1

解説

5(2進数で「0101」)を2桁だけ右へシフトすると「0001」となり、結果は 1 です。これは Math.floor(5 / 4) と同じ計算になります。なお、負の数を扱う場合は >>>>> で結果が異なるため、用途に応じて使い分けが必要です。

  1. JavaScriptのグループ化演算子とは?優先順位の制御方法をサンプルコードで解説

    グループ化演算子とはJavaScriptのグループ化演算子は、丸括弧「()」で表され、式を評価する際の優先順位を制御するために使用されます。通常、演算子にはあらかじめ決められた優先順位があり、乗算(*)や除算(/)は加算(+)や減算(-)よりも先に評価されます。しかし、グループ化演算子で式を囲むことで、この優先順位を意図的に変更し、囲まれた部分を最優先で計算させることができます。例えば「2+2*5/22」という式の場合、標準の優先順位では乗算・除算が先に実行されますが、丸括弧を使うことで「(2+2)*5/22」のように加算を先に行わせることが可能です。サンプルコード以下は、JavaScript

  2. C#の左シフト演算子(<<)と右シフト演算子(>>)の使い方を解説

    C#には、ビット単位でデータを操作するための「シフト演算子」が用意されています。代表的なものが左シフト演算子(<<)と右シフト演算子(>>)です。この記事では、それぞれの仕組みと具体的な使い方をサンプルコードとともに解説します。 左シフト演算子(<<)とは 左シフト演算子は、左側のオペランドの値を、右側のオペランドが指定したビット数だけ左に移動させる演算子です。 ビットが左にずれると、空いた下位ビットには0が埋められます。2進数では1桁左にずれるごとに値が2倍になるため、左シフトは「2のn乗倍」の計算としても利用できます。 右シフト演算子(>>)