运算符优先级问题

[复制链接]
1341|3
 楼主| sinadz 发表于 2013-6-29 12:36 | 显示全部楼层 |阅读模式
#include<iostream>
using namespace std;

int main()
{
    unsigned char a=0xA5;
    unsigned char b=~a>>4;
    unsigned char c = ~a;
    cout<<sizeof(a)<<endl;
    cout<<sizeof(a>>4)<<endl;
    printf("b = %d \n",b);
    unsigned char d = (~a);
    d>>=4;
    printf("%d\n",d);
    unsigned char d2 = (~a)>>4;
    printf("%d\n",d2);
    unsigned char e = (a>>4);
    e=~e;
    printf("%d\n",e);
    return 0;
}
运行结果

1
4
b = 245
5
245
245
问题,为什么
  unsigned char d = (~a);
    d>>=4;
    printf("%d\n",d);
输出5

unsigned char d2 = (~a)>>4;
    printf("%d\n",d2);
输出245
baidudz 发表于 2013-6-29 12:55 | 显示全部楼层
如果都是左移的话就不会出现这种情况,因为截断的时候用不到高位.
C++中算术运算只能针对int类型,因此会有提升,你用的char会隐式转换成int类型,提升了以后取反,高位的都是1了,移位以后高四位都是1,因此最后的结果是245
无冕之王 发表于 2013-6-29 12:59 | 显示全部楼层
LS分析的很有道理
火箭球迷 发表于 2013-6-29 22:02 | 显示全部楼层
baidudz 发表于 2013-6-29 12:55
如果都是左移的话就不会出现这种情况,因为截断的时候用不到高位.
C++中算术运算只能针对int类型,因此会有 ...

分析的很透彻了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部