[英]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;
}
現在是處決的一擊而過。
k
從5開始。 ++k<5
將k
提升到6,而不是 <5
。 &&
表達式的后半部分從不求值,因為0 && ANYTHING == 0
。 ||
的左側 為0時,右側不短路。 必須對其進行評估。 ++k<=8
前進k
到7,其為 <=8
。 ||
右側,所以總條件求值為1 是1。 if
執行if
語句的“ then”子句。 k
當前值為7。 還值得注意的是, &&
子句的后半部分可能未達到您的預期目的。 k++/5
是整數除法,並且由於k>5
始終都>=1
k++/5
,因此k++/5
總是>=1
,因此始終為true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.