原来==的优先级比&高 (转自地址为http://blog.163.com/cynicly@126/blog/static/1206105820103893715302/的网易博客)
昨天晚上开始,就很郁闷一个事情,if的一个判断条件怎么也进不去,后来给后面加了个括号,就可以了,上网一查。。。。。原来是这样。转过来留着看,感谢原作者 。
以下是原文:
最近调了两天的程序的收获,就是发现==的优先级比&高,在之前的记忆中一直有个错误的概念,==的优先级是最低的,结果为了这个错误浪费了我两天的时间.
最近有个程序,用到了简单的if语句,if((1<<F_ML)==flag&(1<<F_ML)),因为一直以为==的优先级是最低的,所以后面的部分没有(),结果程序怎么调结果都不对,中间还以为单片机出问题了,换了两次,而且是QFN封装的,程序从头看到尾不下三遍,还好程序不是太长,都没什么用,就准备放弃的时候,发现编译器下面出现的警告信息,(****.c:121: warning: suggest parentheses around comparison in operand of &),开始一直没留意,程序改的已经没得改了,就想试试看,按编译器的要求增加(),结果就OK了,我就纳闷了,上网一查,吓一跳,原来==的优先级比&高,晕死,想想以前一直按==的优先级在写程序,都没出问题,以前运气还真不是一般的好啊.
附C语言运算符优先级口诀
括号成员第一; //括号运算符[]() 成员运算符. ->
全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&
乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; //即== !=
位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; //逻辑运算符:|| 和 &&
十二和十一; //注意顺序:优先级(||) 底于 优先级(&&)
条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多!
逗号运算级最低! //逗号运算符优先级最低