Bitwise AND を使用して個々のバイトの値を抽出する方法を理解しようとしています。
私が持っているのは 4 バイト配列で、最後の 2 バイトを単一の 2 バイト値にキャストしています。次に、その 2 バイト値から元の 1 バイト値を抽出しようとしています。私のコードと値のスクリーン ショットについては、添付ファイルを参照してください。
私が抱えている問題は、2 バイト値の最後のバイトの値を取得できないことです。
Bitwise ANDでこれを行うにはどうすればよいですか?
Bitwise AND を使用して個々のバイトの値を抽出する方法を理解しようとしています。
私が持っているのは 4 バイト配列で、最後の 2 バイトを単一の 2 バイト値にキャストしています。次に、その 2 バイト値から元の 1 バイト値を抽出しようとしています。私のコードと値のスクリーン ショットについては、添付ファイルを参照してください。
私が抱えている問題は、2 バイト値の最後のバイトの値を取得できないことです。
Bitwise ANDでこれを行うにはどうすればよいですか?
私が抱えている問題は、2 バイト値の最後のバイトの値を取得できないことです。
2 バイト整数は、値 3 と 4 で形成されます (ポインタが にあるためa[1]
)。テストで既に見たように3
、 mask を適用することで を取得できます0xFF
。を取得するには、下位ビットを削除して値をシフト4
する必要があります。あなたの例では、マスクを使用して を16 ビット数値から効果的に削除しますが、値である 2 バイト数値の上位バイトに を残します。代表性の低いものから数えて)0xFF00
3
4
1024 == 2^10
その結果を 8 ビット右にシフトして を取得できます4
。または、右にシフトするだけで最下位ビットが消えるため、マスクを完全に無視できます。
4 == ( x>>8 )
ビットごとにテストする興味深い結果は、単一の数値を操作することで取得できます。
int x = 7; // or char, for what matters:
(x & 0x1) == 1;
(x & (0x1<<1) ) == 2; // (x & 0x2)
(x & ~(0x2)) == 5;
マスクされた値を上位バイトから下位バイトに変換するには、ビットシフトを追加する必要があります。
私が抱えている問題は、2 バイト値の最後のバイトの値を取得できないことです。
その「ウォッチ」テーブルがどこから来たのか、またはさらにコードが関係しているかどうかはわかりませんが、結果が正しいように見えます。そのうちの 1 つは上位バイトであるため、値が << 8 桁シフトされることに注意してください。リトルエンディアンのマシンでは、上位バイトは 2 番目のバイトになります。