C# 数字类型
C#数字类型
C#具有下表中显示的预定义数字类型。
有符号整数
C#类型 | 系统类型 | 后缀 | 大小 | 范围 |
---|---|---|---|---|
sbyte | SByte | 无后缀 | 8位 | -27 〜27 -1 |
short | Int16 | 无后缀 | 16位 | -215 至215 -1 |
int | Int32 | 无后缀 | 32位 | -231 至231 -1 |
long | Int64 | L | 64位 | -263 至263 -1 |
无符号整数
C#类型 | 系统类型 | 后缀 | 尺寸 | 范围 |
---|---|---|---|---|
byte | Byte | 无后缀 | 8位 | 0〜28 -1 |
ushort | UInt16 | 无后缀 | 16位 | 0〜216 -1 |
uint | UInt32 | U | 32位 | 0至232 -1 |
ulong | UInt64 | UL | 64位 | 0至264 -1 |
实数
C#类型 | 系统类型 | 后缀 | 尺寸 | 范围 |
---|---|---|---|---|
float | Single | F | 32位 | +/-(〜10-45 〜1038 ) |
double | Double | D | 64位 | +/-(〜10-328 〜10308 ) |
decimal | Decimal | M | 128位 | +/-(〜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#类型 | 例子 |
---|---|---|
F | float | float f = 1.0F; |
D | double | double d = 1D; |
M | decimal | decimal d = 1.0M; |
U | uint | uint i = 1U; |
L | long | long i = 1L; |
UL | ulong | ulong i = 1UL; |
指定浮点或十进制字面值时,应始终应用F
和M
后缀。
没有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;
当您从浮点数转换为整数时,任何小数部分都将被截断(丢失)。
十进制转换
所有整数类型都可以隐式转换为十进制类型。
对小数类型的所有其他数字转换必须是显式的。