-4
#include <stdio.h>
int main()
{
    int i;

    i=1;
    printf("%d ",!i);

    i=5;
    printf("%d ",!i);

    i=0;
    printf("%d\n",!i);

    return 0;
}

我在 C 中得到以下输出:0 0 1

输出背后的逻辑是什么?

4

6 回答 6

6

In C, any non zero value is considered to be a true value. So taking the logical negation with ! converts it to 0. The logical negation of 0 is 1.

于 2013-06-11T15:17:19.050 回答
2

在 C 中,布尔值是整数,其中 0 是false,任何其他值是true

!不是(如您所知),因此它将任何非 0 的值变为 0,并将 0 变为 1。

于 2013-06-11T15:18:25.337 回答
1

i is used like a boolean value:

  • If i != 0, then !i == 0.
  • If i == 0, then !i == 1.
于 2013-06-11T15:16:17.473 回答
1

“逻辑”是什么意思?

操作员的具体行为!?它由语言标准定义。它产生0非零参数。1对于零论点。这就是它的定义方式。

这种定义背后的理由是什么?好吧,它应该实现该logical-not行为。从历史上看,在 C 语言中,逻辑“假”由零整数值表示,而所有非零都被解释为逻辑“真”。所以,这就是你在实验中观察到的。当!运算符(或 C 中的任何其他逻辑运算符)必须生成“真”结果时,它使用它1来表示它,而不仅仅是一些任意的非零值。

于 2013-06-11T15:19:52.910 回答
0

!是一个布尔运算符,它将给定的输入反转,从真到假,从假到真。真是任何不为零的东西。假是零。因此,当您notted1或时5,您反转一个真值,它打印 false 的整数值 0。接下来,当您反转一个 false 值时,它打印 true 的整数值(默认 1)

于 2013-06-11T15:19:53.233 回答
0

您正在执行布尔运算。这 '!' 不是人们通常认为的逆变器。如果您正在寻找逆变器,请使用“~”。

于 2013-06-11T15:17:26.380 回答