我得到的结果是左移,我找不到解释。为什么无符号字符的结果<< 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
价值。
无符号字符的位如何向左移动以使位被截断并且结果为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 2012-01-03 14:18:28