繁体   English   中英

在C中将0和1用作false和true

[英]Using 0 and 1 as false and true in C

我正在从书中学习C,作者正在解释使用while循环使用1表示true,使用0表示false。 他在下面的示例代码中进行了解释,但我听不懂。

输入

#include<stdio.h>
int main(void)
{
    int n = 3;

    while (n)
        printf("%2d is true\n", n--);
    printf("%2d is false\n", n);


    n = -3;
    while (n)
        printf("%2d is true\n", n++);
    printf("%2d is false\n", n);


    getchar();
    return 0;
}

输出值

3 is true
2 is true
1 is true
0 is false
-3 is true
-2 is true
-1 is true
0 is false

也许如果您添加大括号,就可以正确理解代码。

#include<stdio.h>
int main(void)
{
    int n = 3;

    while (n)
    {
      printf("%2d is true\n", n--);
    }
    printf("%2d is false\n", n);

    n = -3;
    while (n)
    {
      printf("%2d is true\n", n++);
    }
    printf("%2d is false\n", n);


    getchar();
    return 0;
}

您发布的代码和上面的代码是相同的。 如果没有括号while则执行while之后的下一条语句。

这个:

printf("%2d is true\n", n--);

在第一个while期间将继续执行,直到while(n)为假。 while(n)等效于while(n!=0) while(something)仅在something为0时为false。

所以,当n=3在第一循环中的条件为真,然后n--n=n-1使n 2和2的条件为真等。 n为0时,条件变为假并退出循环。 然后,程序将输出false并类似地执行第二个while循环。

在C中的几个地方,使用任何表达式的布尔值决定了程序的流程:

  • 条件语句if
  • 循环结构forwhile ,和do - while
  • 条件表达式? - :

在所有这些地方,一个布尔值消耗 ,隐!= 0添加,所以

while (n)

手段

while (n != 0)

因此,所有非零值都被认为是true

语言中还有其他地方可以通过逻辑表达式生成布尔值,例如逻辑NOT ! 操作员。 在这种情况下,所产生的值被限制在01组。 具体来说,逻辑非零为1

实际上,C将0视为FALSE ,将非0视为TRUE

它第一次到达while(n)n值为3 因为只有0计数为false,所以3计数为true,并且该语句等于while(3) ,即“ while true”,因此将执行以下行:

printf("%2d is true\n", n--);

那条线输出n的值。 如果您不明白为什么要输出该值,请返回一两章,然后阅读printf(.) 我不知道您正在读什么书,但我认为它遵循逻辑顺序并很早就引入了输出。

该行还从n中减去1(这就是n--意思)。 如果您不明白,请再回头。 该表达式将n减1,但在减法之前返回其值。

这导致输出的第一行:

3 is true

然后程序循环回到while条件。 现在n2 但是2仍然算作true,因此再次执行循环代码(第一个printf ),给出:

2 is true

并以n保持值为1 这导致进一步执行循环内代码

1 is true

现在执行叶子n具有值0 那算作假,因此循环条件while(n)while(0) ,表示“ while假”。

因此执行绕过了循环代码并执行:

printf("%2d is false\n", n);

导致线

0 is false

程序的其余部分反过来做类似的事情,从n值为-3 ,然后将其递增(由n++ ),直到再次达到false( n0 )为止。

这样就可以了

-3 is true
-2 is true
-1 is true
0 is false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM