私は説明が見つからない左シフトの結果を得ています。なぜunsigned char << unsigned charの結果がunsigned charではない
unsigned char value = 0xff; // 1111 1111
unsigned char = 0x01; // 0000 0001
std::cout << "SIZEOF value " << sizeof(value) << "\n"; // prints 1 as expected
std::cout << "SIZEOF shift " << sizeof(shift) << "\n"; // prints 1 as expected
std::cout << "result " << (value << shift) << "\n"; // prints 510 ???
std::cout << "SIZEOF result " << sizeof(value << shift) << "\n"; // prints 4 ???
私は1111 1110
する結果を期待していたが、代わりに、私はint
を取得する(?)1 1111 1110
の値を持ちます。
符号なしcharのビットを左にシフトすると、ビットが切り捨てられ、結果は1111 1110になりますか?
私がしようとしているのは、一連のバイトを読み取って、さまざまな長さ(1〜32ビット)の整数として解釈することです。
F0 F5
1111 0000 1111 0101
0F (first 4 bits)
0F (next 8 bits)
05 (last 4 bits)
は算術がintよりも小さいタイプで行われていないという事実を行うには、この何かを持っているだろうか?
11111111 << 1は実際には111111110なので、式の結果を表示しています: 'value = value << shift;'そして 'cout << value;' – Yaniro