簡體   English   中英

短路屬性 C

[英]Short-Circuit property C

根據 C 中的短路屬性:0&&(anything) 給出 0 和 1||(anything) 給出 1。所以根據屬性 - 0&&5||6&&7||4&&!6 ,這應該給我們0

但是當我嘗試在 C 編譯器中運行它時,它給出了1作為答案。

[更新:刪除圖片鏈接,只需在程序中輸入文本即可。]

#include <stdio.h>

int main()
{
    int x;
    x=0&&5||6&&7||4&&!6;
    printf("%d",x);
    return 0;
}

誰能告訴我我錯過了什么或做錯了什么?

讓我試着解釋一下發生了什么,然后你就可以跟進並自己找到你遺漏的東西。

讓我們從你原來的表達開始

0&&5||6&&7||4&&!6

此表達式寫成沒有任何括號的縮寫形式。

這類似於標准數學表達式,其中2*7+3*8被理解為表示*優先於+ ,因此這實際上是(2*7)+(3*8)2*7+3*8+4*3的縮寫形式2*7+3*8+4*3((2*7)+(3*8))+(4*3)的縮寫形式。

同理,上面的C表達式隱式運算符優先級可以通過括號重寫顯式化:

( (0&&5) || (6&&7) ) || (4&&!6)

上面的步驟似乎是你所缺少的,因此你誤解了書面表達的意思。

然后我們可以分別考慮三個小括號:

  • (0 && whatever)0 (適用短路)
  • (6 && 7)1 (6 和 7 均非零即為真,因此結果為真)
  • (4 && !6) nonzero && zerozero0 (后來證明,我們實際上不需要求值)

所以……整個表情

( (0&&5) || (6&&7) ) || (4&&!6)

原來是

( 0 || 1 ) || does_not_matter

要么

1          || does_not_matter     (short circuit applies)

這是1

暫無
暫無

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

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