C语言运算符优先级
C语言运算符优先级(图片来自百度百科)
运算符优先级的小例子
#include <iostream>
using namespace std;
int main() {
unsigned char a = 0xA5;
unsigned char b = ~a >> 4 + 1; // + 的优先级高于 >>
printf("%d\n", b);
return 0;
}
我以为:
0xA5是16进制,转换为二进制后是1010 0101,
取反后是0101 1010,再右移5位得到0000 0010 即10进制2可是实际结果如下:
这里面忽视了整型提升的问题,由于4和1都是整型,~a操作时,会对a进行整型提升
从8位的char型,提升到16位的int型,因此左边需要补8个0:
0000 0000 1010 0101
然后再取反:
1111 1111 0101 1010
再右移5位:
0000 0111 1111 1010
由于b是char类型,所以截取低8位得到1111 1010,即10进制250
注:以上是自己参考《程序员面试宝典》后的推测,如果有错误欢迎指出~