C编程!算术运算符运算

时间:2017-04-26 16:02:14

标签: c

#include <stdio.h> 
int main()
{ 
    int a = 10, b = 5, c = 3; 
    b != !a; 
    c = !!a; 
    printf("%d\t%d", b, c); 
}

这是c代码。我的输出为5 1。我无法得到b和c这个表达式背后的操作。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:7)

由于a最初为10,因此!a评估为0

因此b != !a计算为5 != 0,其计算结果为真表达式1。 (但迈克尔在答案中指出,这不是一个赋值算子。)

评估为c = !!a

c = !0,评估为c = 1

说明: 语言律师可能会对此骂我,但应用于非零表达式的!运算符的计算结果为零。应用于任何false(0)表达式的!运算符的计算结果为1。

答案 1 :(得分:3)

这是一个棘手的问题。

b != !a;基本上是NOP。它仅评估为1,但不会更改b的内容。您可以完全删除此行,您将获得相同的输出。