ビットシフト演算子の紹介:
まず、左シフト演算子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します。xy
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 ^
もちろん、これをあなたの仕事に適用することはあなたに任せます。