簡體   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