JavaScriptのカンマ演算子とビット演算子
JavaScriptのカンマ演算子とビット演算子について
JavaScriptには複数の特殊な演算子が存在します。その中でもカンマ演算子 (,
) とビット演算子 (&
, |
, ^
, ~
, <<
, >>
, >>
) は、少し理解しにくいですが、正しく使えば強力なツールとなります。このページでは、それぞれについて詳細に解説し、豊富な例を示します。
- カンマ演算子
- ビットAND演算子 (&)
- ビットOR演算子 (|)
- ビットXOR演算子 (^)
- ビットNOT演算子 (~)
- 左シフト演算子 (<<)
- 算術右シフト演算子 (>>)
- 論理右シフト演算子 (>>>)
カンマ演算子
カンマ演算子は、複数の式を1つの式として評価し、最後の式の結果を返します。主にコンパクトな記述が必要な場合に使われます。
使用例
// 複数の式を一度に評価
let x = (1, 2, 3); // xには3が代入される
console.log(x); // 出力: 3
// forループでの使用
for (let i = 0, j = 10; i < 5; i++, j--) {
console.log(i, j);
}
// 出力: (0, 10), (1, 9), (2, 8), (3, 7), (4, 6)
カンマ演算子は、可読性を損なう場合があるため、注意して使う必要があります。
ビットAND演算子 (&)
ビットAND演算子は、対応するビットが両方とも1の場合にのみ1を返します。
使用例
console.log(5 & 3); // 出力: 1 (0101 & 0011 = 0001)
console.log(12 & 9); // 出力: 8 (1100 & 1001 = 1000)
ビットOR演算子 (|)
ビットOR演算子は、対応するビットのどちらか一方が1の場合に1を返します。
使用例
console.log(5 | 3); // 出力: 7 (0101 | 0011 = 0111)
console.log(12 | 9); // 出力: 13 (1100 | 1001 = 1101)
ビットXOR演算子 (^)
ビットXOR演算子は、対応するビットが異なる場合に1を返します。
使用例
console.log(5 ^ 3); // 出力: 6 (0101 ^ 0011 = 0110)
console.log(12 ^ 9); // 出力: 5 (1100 ^ 1001 = 0101)
ビットNOT演算子 (~)
ビットNOT演算子は、各ビットを反転させます(1を0に、0を1に)。
使用例
console.log(~5); // 出力: -6 (~0101 = 1010, 2の補数表現で-6)
console.log(~0); // 出力: -1
左シフト演算子 (<<)
左シフト演算子は、指定したビット数だけビットを左に移動させます。右側には0が埋められます。
使用例
console.log(5 << 1); // 出力: 10 (0101 << 1 = 1010)
console.log(3 << 2); // 出力: 12 (0011 << 2 = 1100)
算術右シフト演算子 (>>)
算術右シフト演算子は、指定したビット数だけビットを右に移動させます。左側には符号ビットが埋められます。
使用例
console.log(5 >> 1); // 出力: 2 (0101 >> 1 = 0010)
console.log(-5 >> 1); // 出力: -3 (符号ビットが保持される)
論理右シフト演算子 (>>>)
論理右シフト演算子は、指定したビット数だけビットを右に移動させます。左側には常に0が埋められます。
使用例
console.log(5 >>> 1); // 出力: 2 (0101 >>> 1 = 0010)
console.log(-5 >>> 1); // 出力: 2147483645 (32ビット符号なし整数として扱われる)
まとめ
カンマ演算子とビット演算子は、適切に使えば効率的なコードを書くのに役立ちます。それぞれの特性と注意点を理解し、実際のコードで活用してみてください。