首页 > 解决方案 > 为什么不是负数运算符给出了这个输出

问题描述

有人可以解释以下代码的输出吗-

int a =-3;
printf("%d",!a);

输出是0
我不明白为什么我得到输出为0.

标签: c

解决方案


引用C11,第 6.5.3.3 章

如果其操作数的值比较不等于 0,则逻辑否定运算符的结果!为 0,如果其操作数的值比较等于 0,则为 1。结果类型为int。表达式!E等价于(0==E)

在你的情况下,它可以被视为

 printf("%d", (a == 0));   // where a is -3

它评估为一个虚假的结果,从而打印0为结果。


推荐阅读