日本語訳

こんにちは、未来のプログラミング魔術師たち!今日は、JavaScriptのビット演算子の魅力的な世界に飛び込みます。今、あなたが考えていることを知っています。「ビット什么?」と疑問に思うかもしれません。心配しないでください!このレッスンの終わりまでには、プロのようにビットを操作できるようになるでしょう。では、一緒にこの2進法の冒険に乗り出しましょう!

JavaScript - Bitwise Operators

JavaScript ビット演算子

ビット演算子は、JavaScriptで数値を2進レベルで操作する特別なツールです。これは、コンピュータが内部で行うのと同じように、1と0を扱うことを意味します。少し威圧的に聞こえるかもしれませんが、慣れれば実際にはとても楽しいんです!

具体的な内容に進む前に、私たちがカバーするすべてのビット演算子を見てみましょう:

演算子 名前 説明
& AND 両方のビットが1の場合に各ビットを1に設定
| OR 2つのビットのいずれかが1の場合に各ビットを1に設定
^ XOR 2つのビットが異なる場合にのみ各ビットを1に設定
~ NOT すべてのビットを反転
<< 左シフト 右から0を押し込むことで左にシフト
>> 右シフト 左端のビットを左から押し込むことで右にシフト
>>> ゼロ埋め右シフト 左から0を押し込むことで右にシフト

これらを一つずつ見ていきましょう!

JavaScript ビットAND(&)演算子

ビットAND演算子は、非常に厳しいエクスクルーシブクラブのドアマンのようなものです。両方の入力が1の場合にのみ1を通過させます。それ以外の場合は0です。実際の動作を見てみましょう:

let a = 5;  // 0101の2進数
let b = 3;  // 0011の2進数
console.log(a & b);  // 0001の2進数、これは10進数の1です

この例では、5(0101)と3(0011)をビットごとに比較しています。右端のビットだけが両方で1なので、それだけが通過します。結果は0001、つまり10進数の1です。

JavaScript ビットOR(|)演算子

ビットOR演算子は、少し寛容なバウンサーのようなものです。いずれかの入力が1の場合に通過させます。動作を見てみましょう:

let a = 5;  // 0101の2進数
let b = 3;  // 0011の2進数
console.log(a | b);  // 0111の2進数、これは10進数の7です

ここでは、5または3のいずれかが1の場合に1を得ます。結果は0111、つまり10進数の7です。

JavaScript ビットXOR(^)演算子

XOR演算子は、奇妙なパーティーゲームのようで、帽子またはスカーフをかぶっている場合にのみ入場許可を与えますが、両方を着用している場合には許可しません!ビットが異なる場合にのみ1を返します。見てみましょう:

let a = 5;  // 0101の2進数
let b = 3;  // 0011の2進数
console.log(a ^ b);  // 0110の2進数、これは10進数の6です

ビットが異なる場所(右から2番目と3番目)で1を得ます。結果は0110、つまり10進数の6です。

JavaScript ビットNOT(~)演算子

NOT演算子は、反対の日のようにすべてのビットを反転します。しかし、ここに落とし穴があります!JavaScriptでは、符号を反転し、1を引きます。実際を見てみましょう:

let a = 5;  // 0101の2進数
console.log(~a);  // -6の10進数

結果は驚きかもしれません!JavaScriptは負数に対して2の補数を使うため、~5は実際には-6です。

ビット左シフト(<<)演算子

左シフト演算子は、ビットを左に移動し、右に0を追加するコンveyorベルトのようなものです。Each shift effectively doubles the number:

let a = 5;  // 0101の2進数
console.log(a << 1);  // 1010の2進数、これは10進数の10です
console.log(a << 2);  // 10100の2進数、これは10進数の20です

5が1回シフトで10になり、2回シフトで20になるように見えます。魔法のようです!

ビット右シフト(>>)演算子

右シフト演算子は、ビットを右に移動します。これは数値を効果的に半分にします(下痢):

let a = 5;  // 0101の2進数
console.log(a >> 1);  // 0010の2進数、これは10進数の2です

5を2で割ると2.5ですが、下痢して2になります。

ゼロ埋め右シフト(>>>)演算子

この演算子は>>と似ていますが、負数の場合でも左から0を追加します:

let a = -5;  // 11111111111111111111111111111011の2進数(32ビット)
console.log(a >>> 1);  // 01111111111111111111111111111101の2進数、これは10進数の2147483645です

これは少し複雑です!主に符号無しの数として扱う場合に使用されます。

そして、ここまでがビット演算子の基本です!あなたは刚刚ビット操作の世界の最初のステップを踏み出しました。これらの演算子は現在使用すると抽象的かもしれませんが、バイナリデータの操作やハッシュ関数の作成、特定のアルゴリズムの最適化などに非常に有用です。

おぼえ、練習が完璧を生みます。これらの演算子で遊んでみて、すぐにビットを簡単に操作できるようになるでしょう!楽しいプログラミングをし、ビットがあなたとともにありますように!

Credits: Image by storyset