回答
你的朋友是錯的。對於非零a
,語句a && (b = 5/a)
將賦值5/a
至b
。
如果a == 0
,那麼條件將短路和分配不會發生。
你的朋友是錯的。如果a
的計算結果爲真,則必須對雙方進行評估,因爲&&
必須對雙方進行評估才能執行正確的操作。另一方面||
不會。當然你可以簡單地通過執行代碼並在條件之後檢查b
的值來輕鬆測試它。
如果'a == 0',條件將會短路......不會發生錯誤:)。 –
@AlexLockwood:在問題中指出'a'被假定爲真實的評估,但是我補充說,無論是因爲它可能比忽略它更好。 –
@AlexLockwood:哦,你知道什麼;我不知何故錯過了'a'與'&&'之前使用的變量相同的事實。我(無論出於何種原因)沒有抓住這一點,專注於該部門的'a',而不是第一部分。謝謝。 –
在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
}
祝你好運!
你的朋友是不正確的。由於a和b是整數那麼當爲零 b爲保持不變,但是當一個爲零,則5除以A(INT師!)...
的「& &」運營商短路評價...
經過了這一點,使用gcc ...
- 1. 爲什麼a.compareTo(b)等於compareTo(a,b)或a.method(b)= method(a,b)?
- 2. A == B對B == A,有什麼區別
- 3. 什麼是A&B代表.Aggregate((a,b)=>聲明w/a&b)
- 4. 將A = A + B分配新的內存?
- 5. 爲什麼有A = A +之間的差異B和A + = B
- 6. 爲什麼函數(+)匹配類型(a - > b - > b)?
- 7. a,b = b,a + b和a = b,b = a + b在fibonacci中的區別是什麼[Python]
- 8. 從{a-b,b-c,c-a}改變爲{(a,b),(b,c),(c,a)}?
- 9. 爲什麼var c =「a」|| 「b」返回c =「a」和var c =「a」&&「b」返回c =「b」?
- 10. 輸入(a + b)** 2,輸出a * a + a * b + b * a + b * b
- 11. 爲什麼的Equals [A <: B >:B,B]不編譯
- 12. Python a,b = b,a + b
- 13. 爲什麼「int a,b;」而「int c = a-b」在我給「a」和「b」賦值時不工作?
- 14. 如何將A * A std ::數組拆分爲B * B的塊?
- 15. 爲什麼A - B + B!= A使用PHP DateTime和DateInterval?
- 16. 爲什麼(A - B)。^ 2在MATLAB中不等於(B - A)。^ 2?
- 17. 理解爲什麼A/B不工作,但fromInteger A/fromInteger B則
- 18. 爲什麼「a + + b」有效,但「a ++ b」不能?
- 19. 紅寶石。爲什麼arr =%w {'a','b','c'} => [「'a',」,「'b',」,「'c'」]
- 20. a + = b和a = + b之間的區別是什麼,a ++和++ a?
- 21. 爲什麼我不能分配@b ||在Perl中@c到@a?
- 22. a = a + b和a + = b之間的區別是什麼?
- 23. 爲什麼fold會預期(a - > b - > a)而不是(b - > a - > a)?
- 24. 混合兩個矢量:[a a]和[b b] to [a b a b]
- 25. 爲什麼b比b快?
- 26. vector.push_back(B)和vector.push_back(new A((* B))),爲什麼行爲不一樣?
- 27. 如何「a <= b && b <= a && a!= b」爲真?
- 28. SUM(a * b)做什麼?
- 29. b!= a&1做什麼?
- 30. 如果A和B是單子,如何將A [B [C]]轉換爲B [A [C]]?
愛是愛愚蠢的答案是這樣的...說不上來爲什麼他們得到這麼多upvotes但它的真棒:) –
這是非常真實的,善良的先生! –