C# 数字类型(Number)

通常,数字可以分为两种类型:整数类型 和 浮点类型。

整数类型数字是不带小数点的整数。它可以是负数或正数。

浮点类型是具有一个或多个小数点的数字。它可以是负数或正数。

C#根据它们在内存中的大小和存储数字的能力,为整数类型和浮点类型包括不同的数据类型。

下图说明了C#中的数字类型。

数值类型

整数类型

整数类型数字是带小数点的正或负整数。C#包括四种用于整数的数据类型:字节,短整数,整数和长整数(byte, short, int, long)。

byte

字节数据类型存储从0到255的数字。它在内存中占据8位。byte关键字是.NET中Byte结构的别名。

sbyte与byte相同,但是它可以存储-128到127之间的负数。sbyte关键字是.NET中SByte结构的别名。

byte b1 = 255;
byte b2 = -128;// 编译时错误:常量值“ -128”不能转换为“字节”
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

short数据类型是一个有符号整数,可以存储-32,768到32,767之间的数字。它占用16位内存。short关键字是.NET中Int16结构的别名。

ushort数据类型是无符号整数。它只能存储0到65535之间的正数。ushort关键字是.NET中UInt16结构的别名。

short s1 = -32768;
short s2 = 32767;
short s3 = 35000;//编译时错误:常量值“ 35000”不能转换为“ short”

ushort us1 = 65535;
ushort us2 = -32000; //编译时错误:常量值“ -32000”不能转换为“ ushort”

Console.WriteLine(Int16.MaxValue);//32767
Console.WriteLine(Int16.MinValue);//-32768
Console.WriteLine(UInt16.MaxValue);//65535
Console.WriteLine(UInt16.MinValue);//0

int

int数据类型是32位有符号整数。它可以存储从-2,147,483,648到2,147,483,647的数字。int关键字是.NET中Int32结构的别名。

uint是32位无符号整数。uint关键字是.NET中UInt32结构的别名。它可以存储从0到4,294,967,295的正数。(可选)在数字后使用U或u后缀将其分配给uint变量。

int i = -2147483648;
int j = 2147483647;
int k = 4294967295; //编译时错误:无法将类型'uint'隐式转换为'int'。

uint ui1 = 4294967295;
uint ui2 =-1; //编译时错误:常量值“ -1”不能转换为“ uint”

Console.WriteLine(Int32.MaxValue);//2147483647
Console.WriteLine(Int32.MinValue);//-2147483648
Console.WriteLine(UInt32.MaxValue);//4294967295
Console.WriteLine(UInt32.MinValue);//0

int数据类型也用于十六进制和二进制数。十六进制数字以0x或0X前缀开头。从C#7.2开始,二进制数以0b或0B开头。

int hex = 0x2F;
int binary = 0b_0010_1111;

Console.WriteLine(hex);
Console.WriteLine(binary);

long

long类型是64位有符号整数。它可以存储从-9,223,372,036,854,775,808到9,223,372,036,854,775,807的数字。使用带有数字的l或L后缀将其分配给long类型变量。long关键字是.NET中Int64结构的别名。

ulong类型存储从0到18,446,744,073,709,551,615的正数。如果数字后缀为UL,Ul,uL,ul,LU,Lu,lU或lu,则其类型为ulong。uint关键字是.NET中UInt64结构的别名。

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

浮点类型

浮点数是带一个或多个小数点的正数或负数。C#包括三种浮点数数据类型:浮点数,双精度数 和 小数(float, double, decimal)。

float

float数据类型可以存储从3.4ee038到3.4e + 038的分数。它在内存中占用4个字节。float关键字是.NET中Single结构的别名。

使用带有文字的 f 或 F 后缀使其成为浮点型。

float f1 = 123456.5F;
float f2 = 1.123456f;

Console.WriteLine(f1);//123456.5
Console.WriteLine(f2);//1.123456

double

double数据类型可以存储从1.7e?308到1.7e + 308的小数。它在内存中占用8个字节。double关键字是.NET中Double结构的别名。

使用带文字的 d 或 D 后缀使其成为双精度型。

double d1 = 12345678912345.5d;
double d2 = 1.123456789123456d;

Console.WriteLine(d1);//12345678912345.5
Console.WriteLine(d2);//1.123456789123456

decimal

decimal 数据类型可以存储从±1.0 x 10-28到±7.9228 x 1028的小数。它在内存中占据16个字节。decimal 是.NET中Decimal结构的关键字别名。

decimal 类型比浮点和双精度类型具有更高的精度和更小的范围,因此适用于财务和货币计算。

使用带有文字的 m 或 M 后缀使其成为 decimal 类型。

decimal d1 = 123456789123456789123456789.5m;
decimal d2 = 1.1234567891345679123456789123m;

Console.WriteLine(d1);
Console.WriteLine(d2);

科学计数法

使用 e 或E 表示10的幂,作为科学记数法的指数部分,使用浮点数、双精度数或小数。

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