阅读(1351) (0)

C# 数字类型

2017-01-09 15:18:53 更新

C#数字类型

C#具有下表中显示的预定义数字类型。

有符号整数

C#类型系统类型后缀大小范围
sbyteSByte无后缀8位-27 2-1
shortInt16无后缀16位-215 至215 -1
intInt32无后缀32位-231 至231 -1
longInt64L64位-263 至263 -1

无符号整数

C#类型系统类型后缀尺寸范围
byteByte无后缀8位0〜28 -1
ushortUInt16无后缀16位0〜216 -1
uintUInt32U32位0至232 -1
ulongUInt64UL64位0至264 -1

实数

C#类型系统类型后缀尺寸范围
floatSingleF32位+/-(〜10-45 〜1038 )
doubleDoubleD64位+/-(〜10-328 〜10308 )
decimalDecimalM128位+/-(〜10-28 〜1028 )

十进制类型通常用于财务计算。


数字常量

数字常量可以使用十进制或十六进制符号;十六进制用0x前缀表示。例如:


int x = 1; 
long y = 0x7F; 

实数常量可以使用十进制和/或指数符号。例如:


double d = 1.5; 
double million = 1E06; 

数字常量类型推断

默认情况下,编译器将一个数字常量推断为double或整数类型:

如果常量包含小数点或指数符号(E),则为双精度。

常量类型是此列表中可以适合常量值的第一个类型:int,uint,long和ulong。

例如:


Console.WriteLine ( 1.0.GetType());    // Double (double) 
Console.WriteLine ( 1E06.GetType());   // Double (double) 
Console.WriteLine ( 1.GetType());      // Int32 (int) 
Console.WriteLine ( 0xF0000000.GetType()); // UInt32 (uint) 


数字后缀

数字后缀显式定义常量的类型。

后缀可以是小写或大写,如下所示:

类别C#类型例子
Ffloatfloat f = 1.0F;
Ddoubledouble d = 1D;
Mdecimaldecimal d = 1.0M;
Uuintuint i = 1U;
Llonglong i = 1L;
ULulongulong i = 1UL;

指定浮点或十进制字面值时,应始终应用FM后缀。

没有F后缀,以下行将无法编译,因为4.5将被推断为double类型,它没有隐式转换为float:


float f = 4.5F; 

相同的原则适用于十进制常量:


decimal d = -1231.13M; // Will not compile without the M suffix. 

整数到整数转换

当目标类型可以表示源类型中的每个可能值时,整数转换是隐式的。否则,需要显式转换。

例如:


int x = 12345;        // int is a 32-bit integral 
long y = x;           // Implicit conversion to 64-bit integral 
short z = (short)x;   // Explicit conversion to 16-bit integral 

浮点到浮点转换

float可以隐式转换为double,因为double可以表示float的每个可能的值。

反向转换必须是显式的。

浮点到整数转换

所有整数类型可以隐式转换为所有浮点类型:


int i = 1; 
float f = i; 

反向转换必须是显式的:


int i2 = (int)f; 

当您从浮点数转换为整数时,任何小数部分都将被截断(丢失)。

十进制转换

所有整数类型都可以隐式转换为十进制类型。

对小数类型的所有其他数字转换必须是显式的。