[英]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
for
, while
,和do
- while
?
- :
在所有这些地方,一个布尔值消耗 ,隐!= 0
添加,所以
while (n)
手段
while (n != 0)
因此,所有非零值都被认为是true
。
语言中还有其他地方可以通过逻辑表达式生成布尔值,例如逻辑NOT !
操作员。 在这种情况下,所产生的值被限制在0
, 1
组。 具体来说,逻辑非零为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条件。 现在n
是2
。 但是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( n
为0
)为止。
这样就可以了
-3 is true
-2 is true
-1 is true
0 is false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.