今天群里大神贴出了一道基础题,自己用笔算了一下,正确答案(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))