关于面试宝典的一道题的自我分析

来源:互联网 发布:csgo武器数据 编辑:程序博客网 时间:2024/05/21 19:13

今天群里大神贴出了一道基础题,自己用笔算了一下,正确答案(250)和自己的不对,然后大神给了一份解析,可我却不是这样理解的

int main()

{
        unsigned char a = 0xA5;
        unsigned char b = ~a>>4+1;
        printf("b=%d\n" , b);
        return 0;

}

第一句:a=0xA5,转为二进制,a是10100101

第二句:按群里大神分析,~(a>>(4+1))

~(10100101>>5)

~00000101

  11111010

运算符是按右到左的,“+”高于“>>”高于“~”

第三句:输出的是0XFA,也就是250.

======================================================================================================================================

可我对此有疑问

1,运算符的等级


从表里可以看出,'~'高于'+'高于'>>',按此来算应该是(~a)>>4+1;

01011010>>(4+1);

01011010>>5;

00000010(0x02);

但这个结果不对啊。而且第三句的%d条件没用到

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++我的错误:

符号优先级“~”是由右至左的,所以应该是~(a>>(4+1))