打印

运算符优先级问题

[复制链接]
928|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

粉丝