在C中使用0和1作为false和true

时间:2015-07-20 12:44:39

标签: c loops

我正在从一本书中学习C,作者正在解释使用1表示true,0表示使用while循环表示false。他用以下示例代码解释但我无法理解。

INPUT

#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

4 个答案:

答案 0 :(得分:7)

如果你添加大括号,你可以正确理解代码。

#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之后的下一个语句将被执行。

此:

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

在第一个while中将继续执行,直到while(n)为假。 while(n)相当于while(n!=0)。只有当某些东西为0时,while(something)才为假。

因此,当n=3第一个循环中的条件为真,然后n--n=n-1)使n 2为2时,条件为真,依此类推。当n为0时,条件变为false并退出循环。然后程序打印为false,同样执行第二个while循环。

答案 1 :(得分:5)

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

  • 条件声明if
  • 循环构造forwhiledo - while
  • 条件表达式? - :

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

while (n)

装置

while (n != 0)

因此,除零以外的所有值都被视为true

在语言中还有其他地方,其中布尔值是由生成的逻辑表达式生成的,例如逻辑NOT !运算符。在这种情况下,生成的值仅限于01集。具体来说,零的逻辑NOT是1

答案 2 :(得分:3)

事实上,C将0视为FALSE而将非0视为TRUE

答案 3 :(得分:2)

第一次到达while(n)时,n的值为3。 因为只有0计数为false,所以3计数为真,并且该语句相当于while(3)“为真”,因此执行以下行:

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

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

该行也从n中减去一个(这是n--的含义)。 如果你不明白,再回过头来。 该表达式将n减少一个,但在减法之前返回其值。

这导致第一行输出:

3 is true

然后程序循环回到while状态。现在n2。但2仍然算作真,所以循环代码(第一个printf)再次执行,给出:

2 is true

n持有值1结束。这导致进一步执行环路代码给出

1 is true

现在,执行离开时n的值为0。这被视为错误,因此循环条件while(n)while(0),这意味着“同时为假”。

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

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

线路

0 is false

程序的其余部分反向执行类似的操作,从n开始,其值为-3,然后递增(n++)直到它再次出现错误({{1是n)。

这给出了行

0