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

新手 C unsigned int和int运算的有关问题

2013-08-04 
新手求助C unsigned int和int运算的问题程序是这样:unsigned char a 15unsigned char b ~a1printf

新手求助 C unsigned int和int运算的问题
程序是这样:


unsigned char a = 15;
unsigned char b = ~a>>1;
printf("%d\n", b);


打出来的结果是 248;
a的二进制是 00001111
~a的二进制是 1111000 (240)
为何右移一位变成了248呢?
跪求大神解答。。 类型提升?移位?c
[解决办法]
对a取反时,相当于对(int)a取反,所以取反后要强转后再移位,用下面的方法


unsigned char a = 15;
unsigned char b = (unsigned char)(~a)>>1;
printf("%d\n", b);

[解决办法]
你在取反的时候,相当于是对有符号数a取反.然后做右移.
这个时候a是有符号的.高位补1,于是变成了248.

[解决办法]
类型提升了

//~a的类型是unsigned int, 所以是0xfffffff0
//0xfffffff0>>1得到0xfffffff8
//截断后是f8, 即248

热点排行