关于位操作的
- C/C++ code
#include <iostream>using namespace std;int main(){ unsigned char c = 0x02; unsigned char d = ~c>>1; cout << (~c>>1) << endl; printf("%d\n", d); return 0;}两句输出为什么不一样。。。
- C/C++ code
-2254请按任意键继续. . .
[解决办法]
printf("%d\n", d);等价于cout << (int)(unsigned char)(~c>>1) << endl;
(~c>>1)做了整型提升得到结果为-2。
unsigned char d = ~c>>1;取最低1个字节0xfe赋值给d,printf("%d\n", d);输出254
cout << (~c>>1) << endl;没有赋值给unsigned char所以还是-2
[解决办法]
因为后者的符号位在赋值给d的时候丢了。