Re: C#的加減乘除
※ 引述《ithinkurdumb (YANKEES RULE ALL!)》之銘言:
: 發現一個現象,
: 我在VS.NET 2003 / VS 2005裡面,
: 沒辦法對兩個非Int32作四則運算.
: 也就是說像
: Int16 MyInt1 = 10;
: Int16 MyInt2 = 20;
: Int16 MyInt3 = MyInt1 + MyInt2;
: compile的時候會出現一個error,
: "Cannot implicitly convert type 'int' to 'short'".
請參考:
http://weblogs.asp.net/oldnewthing/archive/2004/03/10/87247.aspx
它簡單的意思是說,假如short+short的總合也被認作是short
那麼萬一兩個short的加總超過short型別允許大小,
就有runtime的危險,稱為int overflow。
例如an unsigned char (8-bit) integer type:
unsigned char a = 255;
unsigned char b = 2;
unsigned char result = a + b;
相加時會轉換成2進位相加:
11111111 (a)
+00000010 (b)
--------
100000001 (result)
因只有8位元,因此最前面的1被忽略,答案變成1。
所以在c#內,會把short的型別加大一級成int32,避免溢位。
但在int的運算裏,卻沒啥問題,我測過臨界值的相加,會被成負的
但不會有compile錯誤。
在c裏,int只有16位元,.net後變成32
如此大的位元,可能也為了防止這些錯誤的發生率
所以寫程式不要太省,統一都用int來宣告整數,是比較好的。
該篇作者的結論是說,為了防止可能的overflow,是要一直寫煩人的轉型別
不過這勝過真正發生溢位問題時,所帶來的後果要輕多了...
對此有研究知道原因的前輩,可以教教大家!
--
You're recommended to vist C_Sharp in PTT.
We are the C#, resistance is futile.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.119.183.211
推
140.115.205.46 10/15, , 1F
140.115.205.46 10/15, 1F
※ 編輯: tomex 來自: 140.119.183.211 (10/15 07:35)
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章
21
65