[英]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
。
i
和j
遞增,因為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.