原文地址:https://blog.csdn.net/zhzht19861011/article/details/5980218
这个错误也是好久前的了.
错误描述:在一个程序中,我想判断一个寄存器与(&)上(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.加减乘除以外的优先级按照逻辑加括号(我狂加括号,让编译器郁闷吧).
|