2013-04-11 94 views
2

我有一個問題關於前和後的增量與邏輯運算符 如果我有這樣的代碼混合增量運營商與邏輯運算符

void main() 
{int i = - 3 , j = 2 , k = 0 , m ; 
m=++i||++j&&++k; 
printf("%d %d %d %d",i,j,k,m);} 

知道增量和減量運算符具有更高的優先級比& &和| | 所以他們會先執行然後& &高於
意味着-2 || 3 & & 1賦予值-2 3 1 1中的printf

但輸出試穿時,我得到VS2010是-2 2 0 1

有沒有人有任何解釋? Regards ,,

+0

請注意,運算符優先級與執行順序不一定相同。除了優先級,這裏最重要的是評估_的順序,在'&&'和'||'運算符的特定情況下恰好是明確定義的。 – Lundin 2017-03-22 14:08:07

回答

3

這是你從短路獲得的。 ++i是-2,其餘不必評估(不符合標準)。 ||的左邊是真的,因爲-2不是0,所以整個表達式是真的。

+0

不&&比||具有更高的優先級? 我的意思是,例如在乘法和加法中,乘法具有比加法更高的優先級,所以如果我們檢查3 + 4 * 5它會是23而不是35 或者我錯過了什麼? 感謝克里斯你的快速反應無論如何:) – user2268349 2013-04-11 00:47:33

+5

它是*,因爲它具有更高的優先順序,這種情況發生。整個事情可以寫成'(++ i)|| (++Ĵ&& ++ K)'。由於左側是真實的,因此不評估右側。如果'||'具有更高的優先級,則必須評估'++ i || ++ j''以確定是否必須是'++ k'。 – chris 2013-04-11 00:48:29

+0

謝謝克里斯,找到你了 – user2268349 2013-04-11 00:49:28