はじめに
使用するプログラムにおいて、ビットシフト演算子を使用する機会があったので、どのようなものなのか簡単にまとめたいと思います。
2進数と10進数
ビットシフト演算子を理解するためには、まず2進数と10進数について理解している必要があります。
2進数と10進数の対応表は以下のとおりです。
10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
2進数 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 |
2進数から10進数への変換方法
2の倍数に関する10進数と2進数の対応表は以下の通りです。2進数の桁が上がる時の10進数の値が記載されています。以下では、2進数を表現する時は一般的に8桁単位で表現するため、8桁未満の場合は頭に0をつけています。
10進数 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
---|---|---|---|---|---|---|---|---|
2進数 | 00000001 | 00000010 | 00000100 | 00001000 | 00010000 | 00100000 | 01000000 | 10000000 |
2進数から10進数への変換する場合は、2進数で1となっている10進数の値を合計することで10進数での値を求める事ができます。例えば、2進数の「00101010」を10進数に変換する場合、基準値が32、8、2の所でビットが1なので、2進数の「 00101010 」は10進数では「42」だと分かります。
上図を見ると、2進数において「1」の値を右に1ビットずらすと、10進数の値が2分の1になっていることが分かります。これが後述するビットシフトにつながります。
※ビットとは?
2進数における1桁のことを1ビット(bit)と言います。
ビットシフト演算子
ビットシフト演算子 >> は、右ビットシフトを行う演算子です。これは、数値を2進数の形式で右にシフトさせる操作で、シフトさせた分だけ数値が小さくなります。
具体的な動作
- x >> n は、x のビット列を 右に n ビット だけシフトさせます
- これにより、数値は2のn乗で割った値に相当します(ただし、整数値で計算される)
サンプルコード
let x = 16; // 16は2進数で 0001 0000
let result = x >> 2; // 右に2ビットシフト
console.log(result); // 出力は4(2進数では 0000 0100)
- 16 は2進数で 0001 0000 です
- これを 2 ビット右にシフトすると 0000 0100 になります
- 結果として 4 となります(16 ÷ 2^2 = 4)
まとめ
ビットシフト演算子についてまとめました。
Reference