作者:LogM
本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~
1. 容易误记的几个运算符
以C++为例,容易误记优先级的运算符有如下几个:
-
关系运算优先级高于位运算
// 任务:a和b求"位与"后,再判断等于0 // 错误写法 if (a & b == 0) { ...; } // 正确写法 if ((a & b) == 0) { ...; } // 这个例子非常经典,因为 linux 的内核曾经有一个 bug 就是这个原因造成的, // 虽然全世界有很多程序员在阅读内核代码,但是很长一段时间里,大家都没有发现这个错误。
-
逻辑运算中
&&
优先于||
,位运算中&
优先于^
优先于|
if (a>c || a<b && d==e) { // 这个判断逻辑是怎么样的? ...; } z = a ^ b & c; // 这条的计算顺序是怎么样的?
2. 不同语言优先级的差异
不同语言,运算符优先级不同,这是非常令人头疼的。比如 C++ 和 Python 的运算符优先级就不一样。
a | c ^ b == 0 //你能说出这行代码分别在 C++ 和 Python 中的运算顺序吗?
所以,记不清运算符优先级时,建议多用括号。尤其对于有位运算和逻辑运算出现的代码,要特别留意。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。