通常,數(shù)字可以分為兩種類型:整數(shù)類型 和 浮點類型。
整數(shù)類型數(shù)字是不帶小數(shù)點的整數(shù)。它可以是負(fù)數(shù)或正數(shù)。
浮點類型是具有一個或多個小數(shù)點的數(shù)字。它可以是負(fù)數(shù)或正數(shù)。
C#根據(jù)它們在內(nèi)存中的大小和存儲數(shù)字的能力,為整數(shù)類型和浮點類型包括不同的數(shù)據(jù)類型。
下圖說明了C#中的數(shù)字類型。
整數(shù)類型數(shù)字是帶小數(shù)點的正或負(fù)整數(shù)。C#包括四種用于整數(shù)的數(shù)據(jù)類型:字節(jié),短整數(shù),整數(shù)和長整數(shù)(byte, short, int, long)。
字節(jié)數(shù)據(jù)類型存儲從0到255的數(shù)字。它在內(nèi)存中占據(jù)8位。byte關(guān)鍵字是.NET中Byte結(jié)構(gòu)的別名。
sbyte與byte相同,但是它可以存儲-128到127之間的負(fù)數(shù)。sbyte關(guān)鍵字是.NET中SByte結(jié)構(gòu)的別名。
byte b1 = 255; byte b2 = -128;// 編譯時錯誤:常量值“ -128”不能轉(zhuǎn)換為“字節(jié)” sbyte sb1 = -128; sbyte sb2 = 127; Console.WriteLine(Byte.MaxValue);//255 Console.WriteLine(Byte.MinValue);//0 Console.WriteLine(SByte.MaxValue);//127 Console.WriteLine(SByte.MinValue);//-128
short數(shù)據(jù)類型是一個有符號整數(shù),可以存儲-32,768到32,767之間的數(shù)字。它占用16位內(nèi)存。short關(guān)鍵字是.NET中Int16結(jié)構(gòu)的別名。
ushort數(shù)據(jù)類型是無符號整數(shù)。它只能存儲0到65535之間的正數(shù)。ushort關(guān)鍵字是.NET中UInt16結(jié)構(gòu)的別名。
short s1 = -32768; short s2 = 32767; short s3 = 35000;//編譯時錯誤:常量值“ 35000”不能轉(zhuǎn)換為“ short” ushort us1 = 65535; ushort us2 = -32000; //編譯時錯誤:常量值“ -32000”不能轉(zhuǎn)換為“ ushort” Console.WriteLine(Int16.MaxValue);//32767 Console.WriteLine(Int16.MinValue);//-32768 Console.WriteLine(UInt16.MaxValue);//65535 Console.WriteLine(UInt16.MinValue);//0
int數(shù)據(jù)類型是32位有符號整數(shù)。它可以存儲從-2,147,483,648到2,147,483,647的數(shù)字。int關(guān)鍵字是.NET中Int32結(jié)構(gòu)的別名。
uint是32位無符號整數(shù)。uint關(guān)鍵字是.NET中UInt32結(jié)構(gòu)的別名。它可以存儲從0到4,294,967,295的正數(shù)。(可選)在數(shù)字后使用U或u后綴將其分配給uint變量。
int i = -2147483648; int j = 2147483647; int k = 4294967295; //編譯時錯誤:無法將類型'uint'隱式轉(zhuǎn)換為'int'。 uint ui1 = 4294967295; uint ui2 =-1; //編譯時錯誤:常量值“ -1”不能轉(zhuǎn)換為“ uint” Console.WriteLine(Int32.MaxValue);//2147483647 Console.WriteLine(Int32.MinValue);//-2147483648 Console.WriteLine(UInt32.MaxValue);//4294967295 Console.WriteLine(UInt32.MinValue);//0
int數(shù)據(jù)類型也用于十六進制和二進制數(shù)。十六進制數(shù)字以0x或0X前綴開頭。從C#7.2開始,二進制數(shù)以0b或0B開頭。
int hex = 0x2F; int binary = 0b_0010_1111; Console.WriteLine(hex); Console.WriteLine(binary);
long類型是64位有符號整數(shù)。它可以存儲從-9,223,372,036,854,775,808到9,223,372,036,854,775,807的數(shù)字。使用帶有數(shù)字的l或L后綴將其分配給long類型變量。long關(guān)鍵字是.NET中Int64結(jié)構(gòu)的別名。
ulong類型存儲從0到18,446,744,073,709,551,615的正數(shù)。如果數(shù)字后綴為UL,Ul,uL,ul,LU,Lu,lU或lu,則其類型為ulong。uint關(guān)鍵字是.NET中UInt64結(jié)構(gòu)的別名。
long l1 = -9223372036854775808; long l2 = 9223372036854775807; ulong ul1 = 18223372036854775808ul; ulong ul2 = 18223372036854775808UL; Console.WriteLine(Int64.MaxValue);//9223372036854775807 Console.WriteLine(Int64.MinValue);//-9223372036854775808 Console.WriteLine(UInt64.MaxValue);//18446744073709551615 Console.WriteLine(UInt64.MinValue);//0
浮點數(shù)是帶一個或多個小數(shù)點的正數(shù)或負(fù)數(shù)。C#包括三種浮點數(shù)數(shù)據(jù)類型:浮點數(shù),雙精度數(shù) 和 小數(shù)(float, double, decimal)。
float數(shù)據(jù)類型可以存儲從3.4ee038到3.4e + 038的分?jǐn)?shù)。它在內(nèi)存中占用4個字節(jié)。float關(guān)鍵字是.NET中Single結(jié)構(gòu)的別名。
使用帶有文字的 f 或 F 后綴使其成為浮點型。
float f1 = 123456.5F; float f2 = 1.123456f; Console.WriteLine(f1);//123456.5 Console.WriteLine(f2);//1.123456
double數(shù)據(jù)類型可以存儲從1.7e?308到1.7e + 308的小數(shù)。它在內(nèi)存中占用8個字節(jié)。double關(guān)鍵字是.NET中Double結(jié)構(gòu)的別名。
使用帶文字的 d 或 D 后綴使其成為雙精度型。
double d1 = 12345678912345.5d; double d2 = 1.123456789123456d; Console.WriteLine(d1);//12345678912345.5 Console.WriteLine(d2);//1.123456789123456
decimal 數(shù)據(jù)類型可以存儲從±1.0 x 10-28到±7.9228 x 1028的小數(shù)。它在內(nèi)存中占據(jù)16個字節(jié)。decimal 是.NET中Decimal結(jié)構(gòu)的關(guān)鍵字別名。
decimal 類型比浮點和雙精度類型具有更高的精度和更小的范圍,因此適用于財務(wù)和貨幣計算。
使用帶有文字的 m 或 M 后綴使其成為 decimal 類型。
decimal d1 = 123456789123456789123456789.5m; decimal d2 = 1.1234567891345679123456789123m; Console.WriteLine(d1); Console.WriteLine(d2);
使用 e 或E 表示10的冪,作為科學(xué)記數(shù)法的指數(shù)部分,使用浮點數(shù)、雙精度數(shù)或小數(shù)。
double d = 0.12e2; Console.WriteLine(d); // 12; float f = 123.45e-2f; Console.WriteLine(f); // 1.2345 decimal m = 1.2e6m; Console.WriteLine(m);// 1200000