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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值