作者: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运算符优先级


LogM
85 声望18 粉丝