共计 515 个字符,预计需要花费 2 分钟才能阅读完成。
作者: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 中的运算顺序吗?
所以,记不清运算符优先级时,建议多用括号。尤其对于有位运算和逻辑运算出现的代码,要特别留意。
3. 优先级表
C++ 运算符优先级
Python 运算符优先级
正文完