c语言中的符号优先级问题

来源:互联网 发布:mac系统c语言编程软件 编辑:程序博客网 时间:2024/06/06 00:49

大部分运算符都有优先级的先后问题 据一些例子

 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;             //将原来的加号改为按位逻辑或

对于运算符的问题上还有很多的问题,一方面我们可以记住这些运算符的优先级,当然这是比较难得,最好用的方法就是加括号,保证想要优先进行的运算能够顺利先一步运算。这是需要注意的一些方面

0 0