#include <stdio.h>
int main()
{
/* Plus(+) operator has precedence over comparison (==) operator,
** and comparison (==) has precedence over XOR(^) operator, so
** evaluation goes like so:
** 1 ^ 0 + 3 ^ 0 == 0
** 1 ^ (0 + 3) ^ 0 == 0
** 1 ^ 3 ^ (0 == 0)
** 1 ^ 3 ^ 1 <-- so this should print 3. */
printf("%d\n", 1 ^ 3 ^ 1); /* Prints '3' ? -- yup */
/* When you want to be sure about precedence and
** what is going on, you can always de-obfuscate
** by forcing precedence with parenthesis */
printf("%d\n", ((1 ^ 0) + (3 ^ 0)) == 0 ); /* Prints '0' */
printf("%d\n", ((1 ^ 0) + (3 ^ 0))); /* Prints '4' */
return 0;
}
4条答案
按热度按时间4uqofj5v1#
Ted Lyngmo将您指向operator precedence表是正确的。相关的剪报。* 从上到下按优先级降序排列 *
| 水平|操作者|
| --|--|
| 1 |()下一页|
| 4 |+的|
| 7 |=-|
| 9 |- -|
因此,如果我们用括号消除你的表达式的歧义:
如果我们开始简化:
zte4gxcn2#
Operator precedence和这个例子可以帮助:
iyr7buue3#
视觉表现
提供的答案已经很好地解释了摆姿势行为背后的推理,但是更直观地描述C简化方程的方式可能对未来的访问者有帮助:
运算符优先级
该方程已根据以下operator predence order-求解:
解释:
给定的方程由C根据其运算符优先级规则here求解。对于给定等式中使用的运算符,优先顺序如下:
(+)>(==)>(^)
此外,如果方程中的所有运算符具有相同的优先级,则方程从左到右求解。
9bfwbjaz4#