关于各种运算的优先级问题
关于各种运算的优先级问题
优先级从高到低排序如下:
加减 | 移位 | 比较大小 | 位与 | 异或 | 位或 |
---|---|---|---|---|---|
+,-- | <<,>> | >,<,==,!= | & | ^ | | |
今天考试时就遇到这样一个问题,mzoj:bit,如果不是开了Wall可能下辈子都不会发现这里有问题
因为移位运算优先级大于&,|,^运算,故k>>b&1写法是正确的
但是if(k>>b&11)的写法是错误的,因为他先计算k>>b位,再计算11,最后计算(k>>b)&(1==1)
应该写成这样:if((k>>b&1)==0)