Re: C#的加減乘除

看板C_Sharp (C#)作者 (tomex_ou)時間20年前 (2004/10/14 22:20), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/4 (看更多)
※ 引述《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
int 8 位元?
140.115.205.46 10/15, 1F
※ 編輯: tomex 來自: 140.119.183.211 (10/15 07:35)
文章代碼(AID): #11ReiUkx (C_Sharp)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
1
1
文章代碼(AID): #11ReiUkx (C_Sharp)