簡體   English   中英

為什么變量不增加?

[英]Why isn't the variable being incremented?

增量運算符不起作用。

我正在學習C語言表達。 我還嘗試了對變量使用增量運算符(前綴和后綴)的不同組合,但輸出結果是相同的。

int i=-3, j=2 ,k=0,m;

m=++i&&++j||++k;

printf("%d%d%d%d\n",i,j,k,m);  

我希望輸出為-2311但輸出為-2301

ij遞增,因為i需要評估。 由於i不為零,因此還需要評估j

但是,由於此組合表達式為非零, || 短路,並且不會評估或執行k++

另一方面,按位運算符不會短路。 它們也不會轉換為布爾值。 如果要評估所有條件並保持相同的結果,則可以編寫

m= (!!++i) & (!!++j) | (!!++k);

使用雙重否定技巧將整數值轉換為布爾值。

或保留另一條語句並簡化為(由user694733提供):

++i; ++j; ++k;
m = i && j || k;

&&|| 運算符短路 -根據表達式左側的值,可能根本無法評估右側。

對於表達式a || b a || b ,如果a不為零,則a || b的結果 a || b是1 不管b ,因此b不評估。 用於表達a && b ,如果a是零,那么的結果a && b是零而不管該值的b ,因此b不評估。

在您的情況下, ++i && ++j的結果為非零,因此不會評估++k

暫無
暫無

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

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