JavaScriptのビット演算子の基本と活用例まとめ
先生と生徒の会話形式で理解しよう
生徒
「先生、JavaScriptでビット演算ってよく聞くけど、そもそもビットって何ですか?」
先生
「ビットとは、0か1のどちらかの値を持つ最小の単位です。コンピュータは内部で数字をこの0と1で表して計算しています。」
生徒
「なるほど。でも、普通の足し算や掛け算と何が違うんですか?」
先生
「ビット演算は、数字を2進数に変換して、その各桁ごとに論理演算を行う方法です。高速に処理できるため、特定の計算やフラグ管理などでよく使われます。」
1. ビット演算子の種類
JavaScriptでよく使われるビット演算子には以下の種類があります。
&(AND演算): 両方のビットが1のときだけ1になります。|(OR演算): どちらかのビットが1なら1になります。^(XOR演算): どちらか一方が1のとき1になります。~(NOT演算): ビットを反転させます。<<(左シフト): ビットを左に移動させます。>>(右シフト): ビットを右に移動させます(符号付き)。>>>(右シフト): ビットを右に移動させます(符号なし)。
2. AND演算とOR演算の基本
AND演算とOR演算は、フラグ管理や条件チェックによく使われます。
// AND演算
console.log(5 & 3); // 1
// OR演算
console.log(5 | 3); // 7
1
7
ここで、5は2進数で0101、3は0011です。AND演算は両方1の桁だけ1になるため0101 & 0011 = 0001となり、結果は1です。
3. XOR演算とNOT演算
XOR演算はビットが異なる場合に1になります。NOT演算はビットを反転させます。
// XOR演算
console.log(5 ^ 3); // 6
// NOT演算
console.log(~5); // -6
6
-6
NOT演算は、符号付き整数の二進数表現で反転するため、マイナスの値になります。
4. シフト演算の使い方
シフト演算はビットを左右にずらすことができ、数値の2倍や半分にする計算によく使われます。
// 左シフト(2倍)
console.log(5 << 1); // 10
// 右シフト(半分)
console.log(5 >> 1); // 2
10
2
左に1ビットずらすと2倍、右に1ビットずらすと半分になるイメージです。
5. ビット演算の活用例
ビット演算は条件チェックやフラグ管理、パフォーマンスが重要な計算で活用されます。
// フラグ管理の例
let FLAG_A = 1; // 0001
let FLAG_B = 2; // 0010
let FLAG_C = 4; // 0100
let status = FLAG_A | FLAG_C; // FLAG_AとFLAG_CをONにする
console.log((status & FLAG_A) !== 0); // true
console.log((status & FLAG_B) !== 0); // false
true
false
このように、ビット演算を使うと複数のフラグを1つの数値で効率的に管理できます。
6. ビット演算を使う際の注意点
- ビット演算は整数にしか正確に動作しません。小数に対しては整数に変換されます。
- 符号付き整数の扱いに注意が必要です。特にNOT演算や右シフトではマイナス値になることがあります。
- 可読性を重視する場合、フラグ管理以外の計算では通常の算術演算を使う方がわかりやすいです。