簡體   English   中英

基本邏輯運算符問題

[英]Basic logical operator question

#include <stdio.h>
int main()
{
    int k=5;
    if(++k < 5 && k++ / 5 || ++k <= 8)
    {
         printf("%d",k);
    }
    return 0;
}

為什么輸出7而不是8?(我是編程的初學者,請耐心等待。)

運算符優先級和邏輯表達式短路評估

邏輯條件中的&&綁定比||綁定更緊密 ,因此您的條件等同於:

((++k<5 && k++/5) || ++k<=8)

以結構化的方式呈現代碼時,更容易閱讀代碼,如下所示:

int main() {
    int k=5;
    if ((++k<5 && k++/5) || ++k<=8) {
        printf("%d",k);
    }
    return 0;
}

現在是處決的一擊而過。

  1. k從5開始。
  2. ++k<5k提升到6,而不是 <5
  3. &&表達式的后半部分從不求值,因為0 && ANYTHING == 0
  4. 因為||的左側 為0時,右側短路。 必須對其進行評估。
  5. ++k<=8前進k到7,其 <=8
  6. 因為||右側,所以總條件求值為1 是1。
  7. if執行if語句的“ then”子句。
  8. 打印k當前值為7。
  9. 程序返回0,然后終止。

還值得注意的是, &&子句的后半部分可能未達到您的預期目的。 k++/5是整數除法,並且由於k>5始終都>=1 k++/5 ,因此k++/5總是>=1 ,因此始終為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM