我得到了左移的结果,但找不到解释。
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
,但实际结果为值为1 1111 1110
的int
数据类型。
如何将无符号字符的位左移,以便截断位并得到结果为1111 1110?
我的目标是读取一系列字节,并将它们解释为长度不同的整数(1-32位)。
F0 F5
1111 0000 1111 0101
可能是
0F (first 4 bits)
0F (next 8 bits)
05 (last 4 bits)
这与算术不使用比int更小的类型有关吗?
value = value << shift;
然后cout << value;
。 - Yaniro