读书人

关于位操作的解决方案

发布时间: 2012-09-17 12:06:51 作者: rapoo

关于位操作的

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的时候丢了。

读书人网 >C++

热点推荐