資料型別的分類有兩種:
- 內建資料型別:常見的有
int,string,bool,char,double等 - 使用者定義資料型別:常見的有
interface,class
若從儲存記憶體的觀點來分類,亦可將資料型別分為二種:
- 實值型別
- 參考型別
值域範圍和後置字元的重要
下面範例,會發生錯誤。
「檢查模式下,作業於編譯時期溢位。」的錯誤訊息
1
2
double TB;
TB = 1024 * 1024 * 1024 * 1024; //發生溢位
錯誤在於每一個 1024均以int型態為預設形態,當連續乘上四次 1024便發生溢位情況(1,099,511,627,776 > 2,147,483,647)。
int範圍-2,147,483,648至2,147,483,647
值域範圍
要如何移除上述的錯誤呢?
最簡單的方式就是將1024改成1024.0來做相乘,因為1024.0會被自動轉成 double資料型態。
1
2
3
double TB;
TB = 1024.0 * 1024.0 * 1024.0 * 1024.0; //1024改成1024.0 就會自動轉成double來做相乘
Console.WriteLine($"TB = {TB} Bytes"); //TB = 1099511627776 Bytes
後置字元
除了上述方法之外,也可以使用「後置字元」方式來轉型成double資料型態。
(數值後面加上d轉型成double)
1
2
3
double TB;
TB = 1024d * 1024d * 1024d * 1024d; //1024加上d轉型成 double來做相乘
Console.WriteLine($"TB = {TB} Bytes");
強制轉型 Convert.To
也可以用「強制轉型」方法Convert.ToDouble()。
1
2
3
double TB;
TB = Convert.ToDouble(1024) * Convert.ToDouble(1024) * Convert.ToDouble(1024) * Convert.ToDouble(1024);
Console.WriteLine($"TB = {TB} Bytes");
指定轉換 (Cast)
或是「指定轉換」
1
2
3
double TB;
TB = (double)1024 * (double)1024 * (double)1024 * (double)1024;
Console.WriteLine($"TB = {TB} Bytes");
Tips
程式執行效能調校 (Performance Tuning)?
程式設計時,可依照實際情況來宣告資料型別,例如:我們宣告YearNum來代表西元,正常之下我們宣告成ushort(0~65535)資料型別已經相當足夠了,但是,若我們宣當成int或long則會造成多餘記憶體的浪費,以宣告成long而言,這一差就是四倍(16 bits vs 64 bits)的儲存剛空間,再加上先天電腦硬體設備不能無限擴充的限制,使得適當的資料型別宣告變得更為重要,這對於程式執行效能有著生死存已的利害關係,這些細節多留意。
Book: Visual C# 2005 建構資訊系統實戰經典教本