TECH I.S.

JavaScript のビット演算


JavaScript ビット演算子
演算子 使用例 説明
& a&b aとbの論理積(ビットAND)
| | a | | b aとbの論理和(ビットOR)
^ a ^ b aとbの排他的論理和(ビットXOR)
~a aのビット反転(ビットNOT)
<< a << n aを左へnビットシフト
>> a >> n aを右へnビットシフト(符号有り)
>>> a >>> n aを右へnビットシフト(符号無し)

使用例 結果 2進数表記 結果
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
〜5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5^1 4 0101 ^ 0001 0100
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

JavaScriptは32ビットのビットオペランドを使用します

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

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

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

上記の例では、4ビットの符号なし2進数を使用しているため~5は10を返します。 JavaScriptは32ビットの符号付き整数を使用し、10を返さないかわりに-6を返します。 0000000000000000000000000000101(5) 111111111111111111111111111010(~5 = -6) 符号付き整数は、左端のビットをマイナス記号として使用します。

JavaScriptビットごとのAND

ビットのペアに対してビットごとのANDを実行すると、両方のビットが1の場合に1が返されます。

1ビット(AND)例:
使用例 結果
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1
4ビット(AND)例:
使用例 結果
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

JavaScriptビットごとのOR

ビットのペアに対してビットごとのORを実行すると、ビットの1つが1の場合に1が返されます。

1ビット(OR )例:
使用例 結果
0 | | 0 0
0 | | 1 1
1 | | 0 1
1 | | 1 1
4ビット(OR)例:
使用例 結果
1111 | | 0000 1111
1111 | | 0001 1111
1111 | | 0010 1111
1111 | | 0100 1111

JavaScriptビット単位のXOR

ビットのペアでビットごとのXORが実行されると、ビットが異なる場合は1が返されます。

1ビット(XOR)例:
使用例 結果
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0
4ビット(XOR)例:
使用例 結果
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

JavaScript ビットごとの AND (&)

ビットごとのANDは、両方のビットが1の場合にのみ1を返します。


10進数 2進数
50000000000000000000000000000101
10000000000000000000000000000001
5 & 10000000000000000000000000000001 (1)

let x = 5 & 1;


JavaScriptビットごとのOR(|)

ビットごとのOR は、いずれかのビットが1の場合に1を返します。


10進数 2進数
50000000000000000000000000000101
10000000000000000000000000000001
5 | 10000000000000000000000000000101 (5)

let x = 5 | 1;


JavaScript ビット単位のXOR(^)

ビット単位のXORは、ビットが異なる場合に1を返します。


2進数 10進数
50000000000000000000000000000101
10000000000000000000000000000001
5^10000000000000000000000000000100 (4)

let x = 5 ^ 1;


JavaScript ビットワイズNOT(~)
2進数 10進数
50000000000000000000000000000101
~5111111111111111111111111111010 (-6)

JavaScript (ゼロ フィル)ビット単位の左シフト(<<)

これは、ゼロ フィルの左シフトです。 1つまたは複数のゼロ ビットが右から押し込まれ、左端のビットが落ちます。


2進数 10進数
50000000000000000000000000000101
5 << 10000000000000000000000000001010 (10)

let x = 5 << 1;


JavaScript(符号保持)ビットごとの右シフト(>>)

これは右シフトを維持する符号です。左端のビットのコピーが左から押し込まれ、右端のビットが落ちます。


10進数 2進数
-5111111111111111111111111111011
-5 >> 1111111111111111111111111111101 (-3)

let x = -5 >> 1;


JavaScript(ゼロ フィル)右シフト(>>>)

これは、ゼロ フィルの右シフトです。1つまたは複数のゼロ ビットが左から挿入され、右端のビットが削除されます。


10進数 2進数
50000000000000000000000000000101
5 >>> 10000000000000000000000000000010 (2)

let x = 5 >>> 1;


二進数

ビットセットが1つだけの2進数は理解しやすいです。


2進数表現 10進値
00000000000000000000000000000011
00000000000000000000000000000102
000000000000000000000000000001004
00000000000000000000000000010008
000000000000000000000000001000016
000000000000000000000000010000032
0000000000000000000000000100000064

さらに数ビットを設定すると、バイナリ パターンが明らかになります。


2進数表現 10進値
00000000000000000000000000001015(4+1)
000000000000000000000000000110113(8+4+1)
000000000000000000000000010110145(32+8+4+1)

JavaScriptの2進数は、2の補数形式で格納されます。

これは、負の数は、数に1を加えたビット単位のNOTであることを意味します。


2進数表現 10 進値
00000000000000000000000000001015
111111111111111111111111111011-5
00000000000000000000000000001106
111111111111111111111111111010-6
000000000000000000000000010100040
1111111111111111111111111011000-40

10進数から2進数への変換

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


2進数から10進数への変換

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



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細