我有一段簡單的代碼,並不符合我的期望。這段代碼有什麼問題?操作順序簡單的腦筋急轉彎
int value1 = (int).5*100;
這很容易,但通過我爲一個良好的時刻循環。當然,答案是微不足道的,而且已經知道了。但是,我認爲對於某人來說可能很有趣。
將向第一個提供正確解決方案並解釋原因的人員授予信用。
我有一段簡單的代碼,並不符合我的期望。這段代碼有什麼問題?操作順序簡單的腦筋急轉彎
int value1 = (int).5*100;
這很容易,但通過我爲一個良好的時刻循環。當然,答案是微不足道的,而且已經知道了。但是,我認爲對於某人來說可能很有趣。
將向第一個提供正確解決方案並解釋原因的人員授予信用。
Firsty它轉換.5
到int
,這導致0
,那麼它通過100
這導致(0 * 100)0
相乘。
如果你希望它是50
,那麼你需要使用括號(所以乘法先行,然後鍵入鑄):
int value1 = (int)(.5*100);
它始終是更好地把更多的括號不到的,它不用花一分錢,它增加了可讀性和理解。
MSDN Library:Operator precedence and associativity。
「出了什麼問題」:括號的使用不足,迫使我背誦和背誦愚蠢的優先規則(這些規則旨在滿足編譯器,而不是人眼),使其難以編寫,甚至更難以維護。
如果意思是即使有點有疑問,請加上括號。即使他們不需要。那麼這是一個非問題。而且你不必記住任何東西!
如果代碼被寫成兩種:
((int)0.5)*100
或:
(int)(0.5*100)
然後我懷疑這個問題將永遠是必要的:)
+1「旨在滿足編譯器,而不是人眼」。我從來不想在閱讀某人的代碼時考慮優先規則。 ** **永遠。 – Polynomial 2012-07-22 09:51:27
它與優先做的演員,演員有更高的優先級,所以我在乘法操作之前執行,你必須使用括號來改變優先順序,試試這樣:
int value1 = (int)(.5 * 100);
'我有一段簡單的代碼,不符合我的期望。那麼,如果你期望它能夠製作咖啡,那麼你必須插上咖啡沖泡子程序,否則它將無法工作。 – 2012-07-22 09:42:26
@KooKiz不要忘記語法糖! – 2012-07-22 09:43:12
除了咖啡:不是垃圾郵件嗎? – 2012-07-22 09:54:07