[英]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.