JavaScript ビット演算子

JavaScript ビット演算子

演算子 名前 説明
& AND 2つのビットがどちらも1であれば、それぞれのビットを1に設定
| OR 2つのビットのうち1つが1であれば、それぞれのビットを1に設定
^ XOR 2つのビットが1であれば、それぞれのビットを1に設定
~ NOT 全てのビットを反転
<< ゼロで左シフト 右からゼロを挿入して左にシフトし、最左端のビットを脱着します。
>> 符号付き右シフト 最左端のコピーを挿入して右にシフトし、最右端のビットを脱着します。
>>> ゼロで右シフト 左からゼロを挿入して右にシフトし、最右端のビットを脱着します。

インスタンス

操作 結果 同等 結果
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
5 ^ 1 4 0101 ^ 0001 0100
~ 5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

JavaScriptは32ビットのビット演算数を使用します

JavaScriptは64ビット浮動小数点数として数字を格納しますが、すべてのビット演算は32ビットの二進数で実行されます。

ビット演算を実行する前に、JavaScriptは数字を32ビット符号付き整数に変換します。

ビット演算を実行した後、結果は64ビットのJavaScript数に変換されます。

上記の例では4ビットの無符号の二進数を使用しています。したがって、~5は10を返します。

JavaScriptは32ビット符号付き整数を使用するため、-6を返します。

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

符号付き整数は最左のビットを使用してマイナス記号としています。

ビット演算 AND

ビット演算 ANDを数位に対して行う場合、数位がすべて 1 であれば 1 を返します。

単位の例:

演算 結果
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

4ビットの例:

演算 結果
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

ビット演算 OR

ビット演算 ORを数位に対して行う場合、そのうちの1つのビットが 1 であれば 1 を返します:

単位の例

演算 結果
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1

4ビットの演算:

操作 結果
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

ビット演算 XOR

ビット演算 XORを数位に対して行う場合、数位が異なる場合には 1 を返します:

単位の例:

演算 結果
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

4ビットの例:

演算 結果
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

JavaScriptのビット演算 AND (&)

もしビットがすべて 1 であれば、ビット演算 AND は 1 を返します:

十進数 二進数
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

インスタンス

var x = 5 & 1;

自分で試してみる

JavaScriptのビット演算 OR (|)

ビットの1つが1の場合、ビット演算 ORは1を返します:

十進数 二進数
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

インスタンス

var x = 5 | 1;

自分で試してみる

JavaScript ビット演算 XOR (^)

ビットが異なる場合、XORは1を返します:

十進数 二進数
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

インスタンス

var x = 5 ^ 1;

自分で試してみる

JavaScript ビット演算 NOT (~)

十進数 二進数
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

インスタンス

var x = ~5;

自分で試してみる

JavaScript(ゼロパディング)ビット演算左シフト(<<)

これはゼロパディングの左シフトです。1個または複数のゼロビットが右側に押し込まれ、最も左側のビットが削除されます:

十進数 二進数
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

インスタンス

var x = 5 << 1;

自分で試してみる

JavaScript(符号付き)ビット演算右シフト(>>)

これはシグネチャを保持する右シフトです。最も左側のビットが左側に押し込まれ、最も右側のビットが移動されます:

十進数 二進数
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

インスタンス

var x = -5 >> 1;

自分で試してみる

JavaScript(ゼロパディング)右シフト(>>>)

これはゼロパディングの右シフトです。1個または複数のゼロビットが左側に押し込まれ、最も右側のビットが移動されます:

十進数 二進数
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

インスタンス

var x = 5 >>> 1;

自分で試してみる

32ビット符号付き整数(二進数)

単一ビットの32ビット整数は非常に理解しやすいです:

二進数表現 十進数値
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

数位を増やして二進数のパターンを明らかにします:

二進数表現 十進数値
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

負数は正数の二進数補码に 1 を加えます:

二進数表現 十進数値
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

十進数を二進数に変換する

インスタンス

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

自分で試してみる

二進数を十進数に変換する

インスタンス

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

自分で試してみる