《C#编程入门与应用》—3.3.2 基本数据类型

举报
清华大学出版社 发表于 2019/10/12 11:27:34 2019/10/12
【摘要】 本节书摘来自清华大学出版社《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 常见的整数类型

image.png

       char 类型的可能值对应于字符编码标准 (Unicode) 的字符集。char 类型与其他整数类型相 比有以下两点不同: 

   ● 没有其他类型到char 类型的隐式转换。即使对于sbyte、byte 和 ushort 这样能完 全使用char 类 型 代 表 其 值 的 类 型,sbyte、byte、ushort 到 char 的隐式转换也不存在。 

   ● char 类型的常量必须被写为字符形式,如果用整数形式,则必须带有类型转换前缀。 

   【例3-14】 

     创建一个控制台应用程序,在 Main() 方法中声明各种类型的变量并赋予初始值,最后将 这些变量的值相乘,并将最终的结果输出。代码如下:

image.png

      在上述代码中,声明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,然后将这两个变量的值相 加并输出。代码如下:

image.png

        在上述代码中,两个操作数分别是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# 在语法上,可以把所有的基础数据 类型看作是支持某些方法的类。类型实际上 仍存储为基本类型。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。