C++ で循環ビットシフトを実装しようとしています。ある時点を除いて、私はたくさんのゼロを取得します。
for (int n=0;n<12;n++) {
unsigned char x=0x0f;
x=((x<<n)|(x>>(8-n))); //chars are 8 bits
cout<<hex<<"0x"<<(int)x<<endl;
}
私の出力は次のとおりです。
0xf
0x1e
0x3c
0x78
0xf0
0xe1
0xc3
0x87
0xf
0x0
0x0
0x0
ご覧のとおり、予想される 0x1e、0x3c などではなく、0x0 を取得し始めます。
for ループを 60 回程度反復するように拡張すると、数値が正しく返されます (多数のゼロの後)。
char には大きなスペースがあり、未使用のデータの「ギャップ」はゼロであると想定しています。私の理解は少し限られているので、何か提案をいただければ幸いです。これらのゼロを捨てる方法はありますか?