ビットシフト演算子の紹介:
まず、左シフト演算子x << n
. x
これにより、すべてのビットが左にシフトされn
、新しいビットがゼロで埋められます。
1111 1111
<< 3: 1111 1000
次に、符号付き右シフト演算子x >> n
. これは、すべてのビットを n だけ右にシフトしx
、符号ビットを新しいビットにコピーします。
1111 1111
>> 3: 1111 1111
1000 0000
>> 3: 1111 0000
0111 1111
>> 3: 0000 1111
最後に、ゼロ埋め右シフト演算子 がありx >>> n
ます。x
これにより、すべてのビットがビット単位で右にシフトされn
、新しいビットがゼロで埋められます。
1111 1111
>>> 3: 0001 1111
また、ビットごとの OR 演算子 が役立つ場合もありますx | y
。x
これは、との各位置のビットを比較しy
、新しい数値のビットがx
またはy
でオンの場合はオンに、そうでない場合はオフに設定します。
1010 0101
| 1010 1010
---------
1010 1111
目の前の問題には前の演算子のみが必要ですが、完全を期すために、最後の 2 つを次に示します。
ビットごとの and 演算子は、 and の両方でビットがオンの場合にのみ、出力のビットを 1 に設定x & y
します。x
y
1010 0101
& 1010 1010
---------
1010 0000
ビットごとの xor 演算子は、x ^ y
どちらか一方の数値でビットがオンで、両方ではない場合、出力ビットを 1 に設定します。
1010 0101
^ 1010 1010
---------
0000 1111
ここで、これらを当面の状況に適用します。
ビットを追加および操作するには、ビット シフト演算子を使用する必要があります。文字列表現に従って右側のビットの設定を開始し、それらをシフトします。バイトの終わりに到達するまで続行し、次のバイトに移動します。「1100 1010」のバイト表現を作成したいとします。
Our byte Target
--------- --------
0000 0000
1100 1010
0000 0001 ^
1100 1010
0000 0011 ^
1100 1010
0000 0110 ^
1100 1010
0000 1100 ^
1100 1010
0001 1001 ^
1100 1010
0011 0010 ^
1100 1010
0110 0101 ^
1100 1010
1100 1010 ^
もちろん、これをあなたの仕事に適用することはあなたに任せます。