【发布时间】:2012-01-03 14:10:05
【问题描述】:
我得到了左移的结果,但我找不到解释。
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。
如何将 unsigned 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 value = value << shift; 然后
cout << value;
标签: c++ bit-manipulation