[英]Logical operator with Arithmetic operator in C
我遇到了一個問題,我想驗證我的假設是否正確。
鑒於以下代碼:
1. int i = -2, j = 1, ans;
2. ans = i++ || ++j;
3. printf("%d %d %d", i,j, ans);
輸出為: -1 1 1
在C語言中,似乎只有0
被視為false,當與邏輯運算符一起使用時,任何其他值都將被視為true。 所以我不懷疑為什么ans派生為1
(真|| true給我們真實(1))
我想問的是:盡管++j
為什么j
的值仍為1
而不是2
? 可以安全地假設邏輯運算符||
之后的任何算術運算 &&
只會在它使用的行(在這種情況下,第2行)生效,之后變量仍然保留其原始值?
||
當第一個操作數nonzero
時,運算符不會對第二個操作數執行任何操作。
因為,任何一個操作數都不non-zero
那么||
輸出將為true
操作員操作。 在您的代碼中,第一個操作數non-zero
。 這就是為什么不執行第二個操作數的操作。
如您的准則的第二行,即
ans = i++ || ++j;
首先它會檢查i++
因為它不是零,這意味着它是真的。 在OR
條件下,如果第一個條件為真,則不會檢查第二個條件,即++j
。
因為如果第一個條件為真無關緊要,則第二個條件為TRUE或FALSE它將返回一個真值。 因此,如果First Condition為true,則不會檢查其他條件。
邏輯運算符短路。 也就是說,在以下內容中:
ans = i++ || ++j;
如果i++
計算結果為真(非零),則永遠不會評估++j
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.