概述
一般来说,C#语言中的数字可以分为两种类型:整型和浮点型:
- 整数类型的数字是没有小数点的整数,它可以是正数也可以是负数。
- 浮点型是具有一个或多个小数点的数字,它可以是正数也可以是负数。
根据内存中的大小和存储数字的容量,C#为整数类型和浮点类型分别提供了不同的数据类型,如下图所示:
整型数据
整数类型的数字是没有小数点的整数。C#提供了四种整数数据类型,分别为:byte
、short
、int
和long
。
Byte
byte
数据类型可以存储0到255之间的数字。它在内存中占用8位。在.NET中对应Byte Struct。
sbyte
与byte
类型相似,只是它们存储数字的区间不同,sbyte
可以存储负数,它存储-128到127之间的数字。
以下是byte
和sbyte
的使用示例:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
byte age1 = 30; // 正确
byte age2 = 300; // 错误
byte age3 = -20; // 错误
sbyte age4 = 50; // 正确
sbyte age5 = 500; // 错误
sbyte age6 = -50; // 错误
sbyte age7 = -500; // 错误
}
}
}
你还可以通过Byte.MinValue
和Byte.MaxValue
分别获取到byte
的最小值和最大值,如下:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Byte的最小值为:"+Byte.MinValue);
Console.WriteLine("Byte的最大值为:"+Byte.MaxValue);
}
}
}
输出结果为:
Byte的最小值为:0
Byte的最大值为:255
短整型(Short)
短整型(short
)是有符号整数,可以存储-32,768到32,767之间的数字。它在内存中占用16位。在.NET中对应Int16。
ushort
与short
类型相似,只是它们存储数字的区间不同,ushort
不可以存储负数,它存储0到65,535之间的数字。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
short s1 = -32768; // 正确
short s2 = 32767; // 正确
short s3 = 35000; // 错误
ushort us1 = 65535; // 正确
ushort us2 = -32000; // 错误
}
}
}
整型(Int)
整型(int
)是32位有符号整数,可以存储 -2,147,483,648 到 2,147,483,647 之间的数字。它在内存中占用32位。在.NET中对应Int32。
uint
与int
类型相似,只是它们存储数字的区间不同,uint
不可以存储负数,它存储 0 到 4,294,967,295 之间的数字。
以下是int
和uint
声明变量的示例:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int i = -2147483648; // 正确
int j = 2147483647; // 正确
int k = 4294967295; // 错误
uint ui1 = 4294967295; // 正确
uint ui2 =-1; // 错误
}
}
}
int
数据类型也可以用十六进制和二进制数表示。十六进制数以0x
或0X
开头,从C# 7.2开始,二进制数则以0b
或0B
作为前缀,如下:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int hex = 0x20;
int binary = 0b_0010_0000;
Console.WriteLine(hex);
Console.WriteLine(binary);
}
}
}
输出结果为:
32
32
长整型(Long)
整型(long
)是64位有符号整数,可以存储 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之间的数字。它在内存中占用64位。在.NET中对应Int64。
ulong
与long
类型相似,只是它们存储数字的区间不同,ulong
不可以存储负数,它存储 0 到 18,446,744,073,709,551,615 之间的数字。
以下是long
和ulong
声明变量的示例:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
long l1 = -9223372036854775808;
long l2 = 9223372036854775807;
ulong ul1 = 18223372036854775808ul;
ulong ul2 = 18223372036854775808UL;
}
}
}
浮点型数据
浮点数是具有一个或多个小数点的正数或负数。C#中有三种不同的浮点数据类型,分别为:浮点数(float
)、双精度数(double
)和精确十进制数(decimal
)。
浮点数(Float)
浮点数(float
)可以存储从3.4e−038到3.4e+038的小数。它在内存中占用32位,其中第一位为符号位,后面8位为幂指数,再其后23位为尾数部分。幂指数的范围为(2-127-2128),表示的数据范围为-3.40E+38 ~ +3.40E+38。而尾数为223=8388608,意味着最多可以有七位的有效位,所以表示float的精度为7位。
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
float f1 = 123456.5F;
float f2 = 1.123456f;
float f3 = 1.123456789f;
Console.WriteLine(f1); //123456.5
Console.WriteLine(f2); //1.123456
Console.WriteLine(f3); //1.1234568
}
}
}
注:使用
f
或F
作为浮点数的后缀标识。
双精度浮点数(Double)
双精度浮点数(double
)可以存储从1.7e−308 到 1.7e+308的小数。它在内存中占用64位,其中第一位为符号位,后面11位为指数为,再其后为52位尾数部分。指数的范围为(2-1023-21024),表示的数据范围为-1.79E+308 ~ +1.79E+308,尾数为252 = 4503599627370496,意味着最多可以有十六位的有效位,所以表示double
的精度为16位。
using System;
namespace ConsoleApp1
{
static class Program
{
static void Main(string[] args)
{
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 的小数。它占用内存128位(16个字节)。
备注:C#语言中,可以使用字母
m
或M
作为精确十进制数的后缀。
using System;
namespace ConsoleApp1
{
static class Program
{
static void Main(string[] args)
{
decimal d1 = 123456789123456789123456789.5m;
decimal d2 = 1.1234567891345679123456789123m;
Console.WriteLine(d1); // 123456789123456789123456789.5
Console.WriteLine(d2); // 1.1234567891345679123456789123
}
}
}
发表评论
登录用户才能发表评论, 请 登 录 或者 注册