2012-06-14 219 views

回答

12

你的朋友是錯的。對於非零a,語句a && (b = 5/a)將賦值5/ab

如果a == 0,那麼條件將短路和分配不會發生。

+1

愛是愛愚蠢的答案是這樣的...說不上來爲什麼他們得到這麼多upvotes但它的真棒:) –

+1

這是非常真實的,善良的先生! –

4

你的朋友是錯的。如果a的計算結果爲真,則必須對雙方進行評估,因爲&&必須對雙方進行評估才能執行正確的操作。另一方面||不會。當然你可以簡單地通過執行代碼並在條件之後檢查b的值來輕鬆測試它。

+0

如果'a == 0',條件將會短路......不會發生錯誤:)。 –

+0

@AlexLockwood:在問題中指出'a'被假定爲真實的評估,但是我補充說,無論是因爲它可能比忽略它更好。 –

+0

@AlexLockwood:哦,你知道什麼;我不知何故錯過了'a'與'&&'之前使用的變量相同的事實。我(無論出於何種原因)沒有抓住這一點,專注於該部門的'a',而不是第一部分。謝謝。 –

1

在C中,如果從邏輯縮減的角度來看,評估將會提前脫離。

即:

if(a && (b=5/a)) 

如果是零,那麼從邏輯上講,整個語句是零/假,如果你忽略了系統錯誤(即:除以零),因此該語句的其餘贏得」 (例如:「零和任何東西等於零」,所以當我們已經知道最終答案時,爲什麼要計算「和任何東西」部分總是爲零)。

一個更好的解決辦法是:

if(a) { 
    b=5/a; 
} else { 
    b=0; 
    printf("ERROR! Attempt to divide by zero would have happened here!"); 
if(a && b) { 
    //Do stuff 
} 

祝你好運!

0

你的朋友是不正確的。由於a和b是整數那麼當爲零 b爲保持不變,但是當一個爲零,則5除以A(INT師!)...

的「& &」運營商短路評價...

經過了這一點,使用gcc ...

相關問題