説明できない奇妙なことを発見しました。ここの誰かが、これが何であるか、またはなぜ起こっているのかを見ることができるなら、私は知りたい. 私がやっていることは、次のように高く整列された 12 ビットを含む unsigned short を取得することです。
1111 1111 1111 0000
次に、短いバイトの各バイトが MSB をパッドとして 7 ビットを保持するようにビットをシフトします。上記の結果は次のようになります。
0111 1111 0111 1100
私がやったことはこれです:
unsigned short buf = 0xfff;
//align high
buf <<= 4;
buf >>= 1;
*((char*)&buf) >>= 1;
これにより、正しいように見えますが、最後のシフトの結果は次のように設定されたビットのままになります。
0111 1111 1111 1100
非常に奇妙な。unsigned char を一時ストレージとシフトとして使用すると、次のように機能します。
unsigned short buf = 0xfff;
buf <<= 4;
buf >>= 1;
tmp = *((char*)&buf);
*((char*)&buf) = tmp >> 1;
この結果は次のとおりです。
0111 1111 0111 1100
ここで何が起こっているのですか?