10 逻辑运算符 1 程序中的短路规则 2 编译器如何处理逻辑表达式中 || 和 && 的混合运算

  • 逻辑或操作符 || 从左到右开始计算

    • 当遇到为真的条件时停止计算,整个表达式为真
    • 所有条件为假时表达式才为假
  • 逻辑与操作符 && 从左向右开始计算

    • 当遇到为假的条件时停止计算,整个表达式为假
    • 所有条件为真时表达式才为真

2 编译器如何处理逻辑表达式中 || 和 && 的混合运算

  • 逻辑表达式中,&&|| 具有更高的优先级

  • &&|| 混合运算时

    • 整个表达式被看作是 || 表达式
    • 编译器从左向右开始计算每一个 && 表达式
    • 最后计算 || 表达式,当某个 && 表达式的值为真时,停止计算,整个表达式的值为真。
  • 示例:逻辑表达式中 || 和 && 的混合运算

    • Demo

      #include <sdtio.h>
      
      int main()
      {
          int i = 0;
          int j = 0;
          int k = 0;
          
          ++i|| ++j&& ++k;  // <=> (1 && ++i) || (++j && ++k)
          
          printf("i = %d
      ",i);  // 1
          printf("j = %d
      ",j);  // 0
          printf("k = %d
      ",k);  // 0
      
          return 0;
      }