运算符优先级引发的bug 红太狼 2022-07-16 14:40 133阅读 0赞 这个错误也是好久前的了. 错误描述:在一个程序中,我想判断一个寄存器与(&)上(1<<17)后是否等于0,代码如下: if(IO0SET&(1<<17)==0) 这样写其实是得不到正确的结果的,因为我忽略了"=="的优先级是大于"&"的.按照上面的代码分析:因为"=="的优先级大于"&",所以程序先判断(1<<17)是否等于0?发现这是不相等的,所以(1<<17)==0表达式的值为假,即为0,0与(&)上任何一个数都是0,所以IO0SET&(1<<17))==0整个表达式的值永远为0,这失去了原本意图。 按照原意,应该这样写: if((IO0SET&(1<<17)))==0) 通过这一个小小的错误,让我认识到一些东西: 1.我的记忆力是不可靠的. 2.鉴于第1条,运算符的优先级我要尽量的少记,就记住加减乘除的优先级. 3.加减乘除以外的优先级按照逻辑加括号
还没有评论,来说两句吧...