#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这个表达式背后的操作。有人可以解释一下吗?
答案 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
的内容。您可以完全删除此行,您将获得相同的输出。