【问题标题】:Why no brackets needed among conditions in if sentence?为什么if语句中的条件之间不需要括号?
【发布时间】:2022-07-16 18:41:32
【问题描述】:
int num;
scanf("%d", &num);

if (num % 4 == 0 && num%100 != 0 || num % 400 == 0)
    printf("%d", 1);
else
    printf("%d", 0);

在这个逻辑中,我发现我不需要在AND 条件中执行(),它在OR 条件前面。 if (*(num % 4 == 0 && num%100 != 0)* || num % 400 == 0)

OR 条件前只需要if (num % 4 == 0 && num%100 != 0 || num % 400 == 0) 而没有()。 所以,似乎(A && B || C)((A && B) || C) 但它似乎可以作为(A && (B || C)) 条件工作。

为什么在这种情况下不需要()? A和B条件从头开始自动分组?

【问题讨论】:

  • 如有疑问使用括号。请记住,在表达式中添加多余的括号并没有什么坏处。
  • 您可以在这里查看:C Operator precedence
  • 与流行的看法相反,单行上的大多数运算符不会赢得价格 :) 始终在 && 和 || 的任何复杂操作数周围使用括号被认为是一种好习惯运算符,即使您知道所涉及的每个运算符的运算符优先级。

标签: c if-statement conditional-statements logic


【解决方案1】:

C(实际上是所有语言)中的所有运算符都有所谓的运算符优先级,它规定了首先对哪些操作数进行分组。

逻辑与运算符&& 的优先级高于逻辑或运算符||,这意味着:

A && B || C

和这个是一样的:

(A && B) || C

所以如果你想B || C被组合在一起,你需要显式地加上括号,即:

A && (B || C)

【讨论】:

    【解决方案2】:

    括号决定了操作的顺序,如果你移动括号,你可能会改变输出的内容。就像 (A + B) / C 与 A + (B / C) 不同,但仍然是一个有效的方程。

    Order of Operations in C

    【讨论】:

      【解决方案3】:

      逻辑 AND 的优先级高于 OR: https://en.cppreference.com/w/c/language/operator_precedence

      dg

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2017-01-27
      • 2011-01-04
      • 1970-01-01
      • 2012-09-10
      • 2021-04-01
      • 2014-08-09
      • 2011-03-29
      • 1970-01-01
      相关资源
      最近更新 更多