为什么if语句"AND"条件不需要加括号?
Why does if sentence "AND" condition does not need to be bracketed?
int num;
scanf("%d", &num);
if (num % 4 == 0 && num%100 != 0 || num % 400 == 0)
printf("%d", 1);
else
printf("%d", 0);
在这个逻辑中,我发现我不需要在OR
条件前面的AND
条件中做()
。
if (*(num % 4 == 0 && num%100 != 0)* || num % 400 == 0)
只需要if (num % 4 == 0 && num%100 != 0 || num % 400 == 0)
没有OR
条件前面的()
。
所以,似乎 (A && B || C)
和 ((A && B) || C)
一样工作
但它似乎可以作为 (A && (B || C))
条件。
为什么在这种情况下不需要 ()
? A、B条件从头开始自动分组?
C 中的所有运算符(实际上是所有语言)都具有所谓的运算符优先级,它规定首先对哪些操作数进行分组。
逻辑 AND 运算符 &&
的优先级高于逻辑 OR 运算符 ||
,这意味着:
A && B || C
与此相同:
(A && B) || C
所以如果要将B || C
组合在一起,需要显式加上括号,即:
A && (B || C)
括号决定运算顺序,如果你移动括号,你可能会改变输出结果。同样,(A + B) / C 不同于 A + (B / C) 但仍然是一个有效的等式。
逻辑 AND 的优先级高于 OR:
https://en.cppreference.com/w/c/language/operator_precedence
dg
int num;
scanf("%d", &num);
if (num % 4 == 0 && num%100 != 0 || num % 400 == 0)
printf("%d", 1);
else
printf("%d", 0);
在这个逻辑中,我发现我不需要在OR
条件前面的AND
条件中做()
。
if (*(num % 4 == 0 && num%100 != 0)* || num % 400 == 0)
只需要if (num % 4 == 0 && num%100 != 0 || num % 400 == 0)
没有OR
条件前面的()
。
所以,似乎 (A && B || C)
和 ((A && B) || C)
一样工作
但它似乎可以作为 (A && (B || C))
条件。
为什么在这种情况下不需要 ()
? A、B条件从头开始自动分组?
C 中的所有运算符(实际上是所有语言)都具有所谓的运算符优先级,它规定首先对哪些操作数进行分组。
逻辑 AND 运算符 &&
的优先级高于逻辑 OR 运算符 ||
,这意味着:
A && B || C
与此相同:
(A && B) || C
所以如果要将B || C
组合在一起,需要显式加上括号,即:
A && (B || C)
括号决定运算顺序,如果你移动括号,你可能会改变输出结果。同样,(A + B) / C 不同于 A + (B / C) 但仍然是一个有效的等式。
逻辑 AND 的优先级高于 OR: https://en.cppreference.com/w/c/language/operator_precedence
dg