數值型別結構

C# 數值資料型別是比較單純的資料類型,針對這些型別的資料運算,可以透過其對應的結構來進行,下表列舉 System 命名空間當中,與 C# 對應的結構型別,這些結構讓你能夠透過其定義的成員,執行相關的數值運算:

結構C# 型別
Int16short
Uint16unshort
Int32int
Uint32uint
Int64long
Uint64ulong
結構C# 型別
Singlefloat
Doubledouble
Decimaldecimal
SBytesbyte
Bytebyte
Charchar
Booleanbool

表列的結構,提供了操作各種數值型別資料所需的方法成員,它們就如同類別,因此可以參照至一個相同的基礎型別資料,並且為這些基礎型別建立其對應的實體物件。

建立數值型別結構與其他一般的類別並沒有任何差異,以 Boolean 為例,你可以經由以下的程式片段建立一個 Boolean 物件 xbool :
Boolean b = new Boolean(true) ;
同樣的,每一種結構亦能夠以類似的方式建立相關物件以執行數值運算。

整數型別結構

目前所討論的各種結構,提供了方法 Parse 支援型別的轉換操作,此方法最常見的便是將使用者輸入文字方塊的字串轉換成為 int 或是 double 進行運算,例如以下這一行程式碼:
int.Parse(str)
其中的參數 str 是字串。

以 Byte 結構為例, Parse 用來將一個指定的字串轉換成為 Byte 型態的數值資料,其定義如下:
public static byte Parse(string s)
其中的 string 參數 s 為所要轉換的字串,例如底下這一行程式碼:
Byte.Parse("7")
其中的參數以雙引號標示,代表其為字串, Parse 將其轉換成為 byte 型態的數值 7 回傳,而讀者必須注意的是,此方法為 static ,因此不需建立物件即可進行引用。

其他的結構亦提供了相同的方法,只是回傳型別的差異,例如將字串參數轉型成為 int 型別回傳,其定義如下:
public static int Parse(string s)
由於 Parse 涉及型別轉換,因此可能發生轉換錯誤的情形,你必須確認這些方法接受了一個合法的數字表示字串。

以下示範 Parse方法的效果。
class Program
{
    static void Main(string[] args)
    {
        Console.Write("a : ");
        var a = int.Parse(Console.ReadLine());
        Console.Write("b : ");
        var b = int.Parse(Console.ReadLine());
        Console.WriteLine("a+b:{0}", a + b);
        //
        Console.Write("c : ");
        var c = Console.ReadLine();
        Console.Write("d : ");
        var d = Console.ReadLine();
        Console.WriteLine("c+d:{0}", c + d);
        //
        Console.ReadKey();

    }
}
第一段程式碼將使用輸入的值儲存至變數 a 與 b,透過引用 Parse 轉換成為 int,然後進行加總,第二段程式碼將使用輸入的值儲存至變數 c 與 d,緊接著直接進行加總,來看以下的執行結果。
a : 200
b : 300
a+b:500
c : 200
d : 300
c+d:200300
同樣是200與300兩個輸入值,變數 a 與 b 因為經過 Parse 轉型,因此是整數,加總後得到300的結果,而c與d則維持字串,結果是兩個字串的合併。
整數結構的成員中,另外提供了兩個描述其特性的重要欄位成員 - MaxValue 與 MinValue ,引用這兩個成員,可以取得其此結構數值範圍所的最大與最小值,以 Int16 為例,定義如下:
public const short MaxValue()
public const short MinValue ()
這兩個均是常數欄位,其他結構亦定義相同的欄位,底下的範例分別引用各種結構的成員,輸出其數值範圍的最大與最小值。
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Byte: {0} - {1}",
            Byte.MinValue, Byte.MaxValue);
        Console.WriteLine("SByte: {0} ~{1}",
            SByte.MinValue, SByte.MaxValue);
        Console.WriteLine("Int16: {0} ~{1}",
            Int16.MinValue, Int16.MaxValue);
        Console.WriteLine("UInt16: {0} ~{1}",
            UInt16.MinValue, UInt16.MaxValue);
        Console.WriteLine("Int32: {0} ~{1}",
            Int32.MinValue, Int32.MaxValue);
        Console.WriteLine("UInt32: {0} ~{1}",
            UInt32.MinValue, UInt32.MaxValue);
        Console.WriteLine("Int64: {0} ~{1}",
            Int64.MinValue, Int64.MaxValue);
        Console.WriteLine("UInt64: {0} ~{1}",
            UInt64.MinValue, UInt64.MaxValue);
        //
        Console.ReadLine();

    }
}
這段程式碼輸出各種整數型別可能的最大與最小值,請自行比對。
Byte: 0 - 255
SByte: -128 - 127
Int16: -32768 - 32767
UInt16: 0 - 65535
Int32: -2147483648 - 2147483647
UInt32: 0 - 4294967295
Int64: -9223372036854775808 - 9223372036854775807
UInt64: 0 - 18446744073709551615

























沒有留言: