簡體   English   中英

C中使用算術運算符的邏輯運算符

[英]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.

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