《C#编程入门与应用》—3.3.2 基本数据类型
3.3.2 基本数据类型
C# 提供一套预定的结构类型,叫作基本数据类型,又称为简单数据类型。该类型用保留 字定义,这些保留字仅仅是在System命名空间里预定义的结构类型的化名。例如int是保留字, 而 System.Int32 是在 System 命名空间中的预定义类型。一个基本数据类型和它化名的结构类 型是一样的,也就是说,int 和 System.Int32 是一样的。
C# 中可以将基本数据类型分为整型、浮点类型、小数类型、布尔类型和字符型。
1.整型
C# 中支持9 种整型:sbyte、byte、short、ushort、int、uint、long、ulong 和 char,具体 含义如表 3-2 所示。
表 3-2 常见的整数类型
char 类型的可能值对应于字符编码标准 (Unicode) 的字符集。char 类型与其他整数类型相 比有以下两点不同:
● 没有其他类型到char 类型的隐式转换。即使对于sbyte、byte 和 ushort 这样能完 全使用char 类 型 代 表 其 值 的 类 型,sbyte、byte、ushort 到 char 的隐式转换也不存在。
● char 类型的常量必须被写为字符形式,如果用整数形式,则必须带有类型转换前缀。
【例3-14】
创建一个控制台应用程序,在 Main() 方法中声明各种类型的变量并赋予初始值,最后将 这些变量的值相乘,并将最终的结果输出。代码如下:
在上述代码中,声明int类型(整型)的变量num,表示数量;声明float类型的price变量, 表示单价;double 类型的变量 totalPrice 表示商品的总价格,price*num 的结果是 float 类型, 但是声明的是 double 类型的变量并赋值给该变量,因此属于隐式类型转换。
编译执行上述代码,输出结果如下:
45.52 * 10 = 455.200004577637
提示
因为 byte 类型、short 类型、int 类型和 long 类型都是整数类型,故可以使用“+”号相加,而 不是字符串之间的连接。
2.浮点类型
C# 支持两种浮点类型:float 和 double。
● float 类型。该类型所能表示的值的范 围为1.5×10-45~3.4×1038,精确到小数 点后面 7 位。
● double 类型。该类型所能表示的值的 范围为1.5×10-324~3.4×10308,精确到 小数点后面 15 位或 16 位。
二元操作中,如果其中一个操作数为浮 点类型,而另外一个操作数是整型或浮点类 型,则运算规则如下:
● 如果其中一个操作数是整型,则操作 数被转换为另一个操作数的浮点数类型。
● 如果操作数之一是double 类型,则另 一操作数也被转换成double 类型,运 算以double 类型的精度和取值范围执 行,并且结果也为double类型。否则, 运算至少将按float 类型的取值范围 和精度执行,并且所得结果也为 float 类型。
【例3-15】
创建控制台应用程序,在 Main() 方法中 分别声明 float 类型的变量 price1 和 double 类 型的变量price2,然后将这两个变量的值相 加并输出。代码如下:
在上述代码中,两个操作数分别是float 和 double,相加的结果是double 类型;如果 要转换为 float 类型,需要对 double 类型的变 量进行强制转换。 编译执行上述代码,运行结果如下:
priceNum=134.729998474121 priceNum2=134.73
3.小数类型
在 C# 中,decimal 表示小数类型,小数 类型非常适用于金融和货币运算,该类型的 数值范围为1.0×10-28 ~7.9×1028,精确到小 数点后面 28 位。如果二元操作中的一个操作 数是小数类型,而另外一个操作数是整型, 则整型在运算前被转换为小数类型。
如果一个小数类型的算术运算产生了一 个对于小数类型的范围来说太大的值,就会 触发溢出错误。小数类型相比浮点类型而言, 具有更大的精确度,但是数值范围相对小了 很多。将浮点类型的数向小数类型的数转换 时会产生溢出错误,将小数类型的数向浮点 类型的数转换时会造成精确度的损失。因此, 两种类型不存在隐式或显式转换。
【例3-16】
声明decimal 类型时,可以使用后缀m 或 M。代码如下:
decimal myMoney = 300.5m;
如果没有后缀 m 或 M,则上述数字将被 视为 double 类型并且会产生编译器错误。
整型被隐式转换为decimal 类型,其计 算后的结果为 decimal,因此可以使用整数文 本初始化变量而不用后缀。代码如下:
Decimal myMoney = 300;
在 float 类型和decimal 类型之间不存在 隐式转换,因此必须使用强制转换以在这两 个类型之间转换。代码如下:
decimal myMoney = 99.9m;
double yourMoney = (double)myMoney;
myMoney = (decimal)yourMoney;
4.布尔类型
布尔类型表示布尔逻辑量,它的取值只能是 true 或者 false。在 bool 和其他类型之间 并不存在标准转换。具体地说,bool 类型与 整型截然不同,不能用 bool 值代替整数值, 反之亦然。
在 C 和 C++ 语言中,零整数或浮点值 或 null 指针可以转换为布尔值false,非零整 数或浮点值或非null 指针可以转换为布尔值 true。但是在C# 中,这种转换是通过显式地 将整数或浮点值与零比较,或者显式地将对 象引用与 null 进行比较来完成的。 例如,下面的代码声明bool 类型的变量 isGirl,将结果指定为 true:
Bool isGirl = true;
5.值类型的默认值
所有的值类型都隐式声明一个称为默认 构造函数的公共无参数实例构造函数。默认 构造函数返回一个零初始化实例,它就是该 类型的默认值。 ● 对于sbyte、byte、short、ushort、int、 uint、long、ulong、默认值为 0。
● 对于 char,默认值为 ‘\x0000’。
● 对于 float,默认值为 0.0F。
● 对于 double,默认值为 0.0D。
● 对于 decimal,默认值为 0.0M。
● 对于 bool,默认值为 false。
● 对于一个枚举类型,默认值为 0。
● 对于一个结构类型,默认值的设置就 是把所有的值类型的域都设置为它们 各自的默认值,把所有的引用类型的 域赋为空。
注意
C# 任何的基本数据类型并没有内置于 C# 语言中,而是内置于.NET 框架中。例如在 C# 中声明int 类型的数据时,声明的实际上 是 .NET 结构System.Int32 的一个实例。也就 是说,C# 在语法上,可以把所有的基础数据 类型看作是支持某些方法的类。类型实际上 仍存储为基本类型。
- 点赞
- 收藏
- 关注作者
评论(0)