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

dhi*_*007 -1 c loops

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

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;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT

3 is true
2 is true
1 is true
0 is false
-3 is true
-2 is true
-1 is true
0 is false
Run Code Online (Sandbox Code Playgroud)

Min*_*ons 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;
}
Run Code Online (Sandbox Code Playgroud)

您发布的代码和上面的代码是相同的.如果没有大括号,while则执行后的下一个语句.

这个:

printf("%2d is true\n", n--);
Run Code Online (Sandbox Code Playgroud)

在第一次将继续执行,直到while(n)是错误的.while(n)相当于while(n!=0).while(something)只有在某事为0时才是假的.

因此,当n=3第一个循环中的条件为真,然后n--(n=n-1)使n2为2时,条件为真,依此类推.当n为0时,条件变为假并退出循环.然后程序打印错误,类似地执行第二个while循环.


das*_*ght 5

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

  • 条件声明 if
  • 循环结构for,while以及do-while
  • 条件表达式?-:

消耗布尔值的所有这些地方,!= 0都会添加隐式,因此

while (n)
Run Code Online (Sandbox Code Playgroud)

手段

while (n != 0)
Run Code Online (Sandbox Code Playgroud)

因此,考虑除零以外的所有值true.

语言中还有其他位置由逻辑表达式生成布尔值,例如逻辑NOT !运算符.在这种情况下,所产生的值被限制在0,1设定.具体来说,零的逻辑NOT是1.