[英]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 && zero
是zero
是0
(后來證明,我們實際上不需要求值)所以……整個表情
( (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.