C 运算符 && 和 || 的优先级

标签 c

#include <stdio.h>

int main()
{ 
    int a = -3, b = 2, c = 0, d;
    d = ++a || ++b && ++c;
    printf("%d %d %d %d", a, b, c, d);
    return 0;
}

程序的输出是:

-2 2 0 1

编译器在 AND ( || ) 之前评估 OR ( && ) 运算符,但在运算符优先级上,AND ( && ) 运算符位于 OR ( || ) 之前。

请解释为什么会发生这种情况。

最佳答案

正是因为 && has more precedence than || ,声明:

d = ++a || ++b && ++c;

相当于:

d = ++a || (++b && ++c);

现在,首先评估和测试 ++a (由于运算符 ||evaluation order 规则)。最终结果是 -2

由于它非零,因此结果为 true (1)。因此,由于 || 的快捷方式机制,表达式的另一部分 (++b &&++c) 不会被计算。 > 运算符。

因此,d 被分配为 1

关于C 运算符 && 和 || 的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52963371/

相关文章:

c - 对学生数据库进行散列(使用链)(位折叠/加法散列)

C 和 Haskell 中整数的组合

c# - 从 C# 项目调用 c native 函数

时间:2019-03-17 标签:c++segfault: char pointers

c - 用 C 语言编写维吉尼亚密码(保留空格)

c - struct sockaddr.sa_data 似乎太小

c - LynxOS strtod 与 Linux 不同

c++ - 当像 C++ 一样编码时,C 代码不起作用

c - 将任何数组类型传递给 C 中的函数

c - 仅链接库中的某些符号