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 で割ったものと同じになる。