首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于位操作的解决方案

2012-09-17 
关于位操作的C/C++ code#include iostreamusing namespace stdint main(){unsigned char c 0x02unsi

关于位操作的

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

热点排行