大部分运算符都有优先级的先后问题 据一些例子
1> if(flags & FLAGS) //其中flags 与 FLAGS 都是变量,想用来判断flags 与 FLAGS 在二进制上同位是否有同1,也就是存在相同二进制位上的指数是否相同且为1,对于电脑来说自然而然地认为if(flags & FLAGS != 0)为真,但是当运行时,因为运算符优先级的问题,电脑认成if(flags & (FALGS != 0)),这就造成了歧义,故应该改写为if((flags & FLAGS) != 0) 即可满足要求。
2> 如果有 high 和 low 两个整形变量的值介于 0 到 15 之间,如果整形变量r的低四位与low一致,高四位与high一致,则r可表示为r = high << 4 + low;但因为优先级问题,电脑将自动识别为 r = high << (4 + low) ,这样就产生了歧义。
这里有两种方法可以改正
a> r = (high << 4) + low; //加括号
b> r = high << 4 | low; //将原来的加号改为按位逻辑或
对于运算符的问题上还有很多的问题,一方面我们可以记住这些运算符的优先级,当然这是比较难得,最好用的方法就是加括号,保证想要优先进行的运算能够顺利先一步运算。这是需要注意的一些方面