2012-07-22 61 views
-5

我有一段簡單的代碼,並不符合我的期望。這段代碼有什麼問題?操作順序簡單的腦筋急轉彎

int value1 = (int).5*100; 

這很容易,但通過我爲一個良好的時刻循環。當然,答案是微不足道的,而且已經知道了。但是,我認爲對於某人來說可能很有趣。

將向第一個提供正確解決方案並解釋原因的人員授予信用。

+3

'我有一段簡單的代碼,不符合我的期望。那麼,如果你期望它能夠製作咖啡,那麼你必須插上咖啡沖泡子程序,否則它將無法工作。 – 2012-07-22 09:42:26

+1

@KooKiz不要忘記語法糖! – 2012-07-22 09:43:12

+0

除了咖啡:不是垃圾郵件嗎? – 2012-07-22 09:54:07

回答

10

Firsty它轉換.5int,這導致0,那麼它通過100這導致(0 * 100)0相乘。

如果你希望它是50,那麼你需要使用括號(所以乘法先行,然後鍵入鑄):

int value1 = (int)(.5*100); 

它始終是更好地把更多的括號不到的,它不用花一分錢,它增加了可讀性和理解。

MSDN Library:Operator precedence and associativity

16

「出了什麼問題」:括號的使用不足,迫使我背誦和背誦愚蠢的優先規則(這些規則旨在滿足編譯器,而不是人眼),使其難以編寫,甚至更難以維護。

如果意思是即使有點有疑問,請加上括號。即使他們不需要。那麼這是一個非問題。而且你不必記住任何東西!

如果代碼被寫成兩種:

((int)0.5)*100 

或:

(int)(0.5*100) 

然後我懷疑這個問題將永遠是必要的:)

+4

+1「旨在滿足編譯器,而不是人眼」。我從來不想在閱讀某人的代碼時考慮優先規則。 ** **永遠。 – Polynomial 2012-07-22 09:51:27

3

它與優先做的演員,演員有更高的優先級,所以我在乘法操作之前執行,你必須使用括號來改變優先順序,試試這樣:

int value1 = (int)(.5 * 100);