JavaScript 入門 | 演算子 (operator) | ビット演算子 (bitwise operator)

ビット演算子 (bitwise operator)

ビット演算子は論理演算子に似ているが、ビット (bit) 単位で論理演算を行う。
また、ビット単位で全体のビットを左または右へ移動させるときにも使用する。

ビット演算子 説明
& 対応するビットがどちらも 1 の場合に 1 を返す。(ビット AND 演算)
| 対応するビットのうち 1 つでも 1 であれば 1 を返す。(ビット OR 演算)
^ 対応するビットが互いに異なる場合に 1 を返す。(ビット XOR 演算)
~ ビットが 1 なら 0 に、0 なら 1 に反転する。(ビット NOT 演算)
« 指定した数だけすべてのビットを左へ移動する。(left shift 演算)
» 符号を維持しながら、指定した数だけすべてのビットを右へ移動する。(right shift 演算)
»> 指定した数だけすべてのビットを右へ移動し、新しいビットはすべて 0 になる。

ビット AND 演算子 (&)

ビット AND 演算子 (&) は、対応する 2 つのビットがどちらも 1 の場合だけ 1 を返し、それ以外の場合はすべて 0 を返す。

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

ビット OR 演算子 (|)

ビット OR 演算子 (|) は、対応する 2 つのビットのうち一方でも 1 であれば 1 を返し、両方が 0 の場合だけ 0 を返す。

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

ビット XOR 演算子 (^)

ビット XOR 演算子 (^) は、対応する 2 つのビットが互いに異なる場合に 1 を返し、同じ場合は 0 を返す。

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

ビット NOT 演算子 (~)

ビット NOT 演算子 (~) は、該当ビットが 1 なら 0 を返し、0 なら 1 を返す。

1 ビットの例

NOT 演算子 結果
~ 0 1
~ 1 0

4 ビットの例

NOT 演算子 結果
~ 0000 1111
~ 0001 1110
~ 0010 1101
~ 0100 1011

ビットシフト演算子 («, »)

次の例は、シフト演算子 («, ») とビット NOT 演算子 (~) の例である。

var x = 15, y = 8, z = 15;
document.write((x << 1) + "<br>"); // 2 倍と同じなので 15 * 2 = 30
document.write((y >> 1) + "<br>"); // 2 で割るのと同じなので 8 / 2 = 4
document.write(~z);                // 1 の補数と同じなので -(15+1) = -16

上の例で最初の演算は、ビットをすべて左へ 1 ビットずつ移動する演算である。
したがって、その結果値は元の値に 2 を掛けたものと同じになる。
反対に 2 番目の演算は、ビットをすべて右へ 1 ビットずつ移動する演算である。
したがって、その結果値は元の値を 2 で割ったものと同じになる。