自动类型转换

 

数值类型有很多种,如字符型、整型、长整型和实型等,因为这些类型的变量、长度和符号特性都不同,所以取值范围也不同。

在C语言中如果把比较短的数值类型变量的值赋给比较长的数值类型变量,那么比较短的数值类型变量中的值会升级表示为比较长的数值类型,数据信息不会丢失。就像倒水,如图4.7所示,小杯的水倒进大杯,水就不会流失。但是,如果大杯的水向小杯里倒,如图4.8所示,那么水就会溢出来。数据也是一样,较长的数据就像是大杯里的水,较小的数据就像小杯水,如果把较长的数值类型变量的值赋给比较短的数值类型变量,那么数据就会降低级别表示,当数据大小超过比较短的数值类型的可表示范围时,就会发生数据截断,就如同溢出的水。

          

             图4.7  自动转换                                           图4.8  强制转换

例如:

float i=10.1f;

int j=i;

遇到这种情况时就会发出警告信息,如图4.9所示。

 

图4.9  程序警告

 强制类型转换

如果遇到图4.9所示的警告,就使用强制类型转换告知编译器,则不会出现警告。强制类型转换的一般形式为:

(类型名) (表达式)

例如,在不同变量类型转换时使用强制类型转换的方法:

float i=10.1f;

int j= (int)i;                              /*进行强制类型转换*/

在代码中可以看到:在变量前使用包含要转换类型的括号,这样就对变量进行了强制类型转换。

常见错误:如果某个表达式要强制转化,需要将表达式用括号括起来,否则会只对第一个变量或常量进行强制转化。例如:

float x=2.5f,y=4.7f;          /*定义2个float型变量并赋值*/

int z=(int)(x+y);                 /*将表达式x+y的结果强制转化为整型*/

实例  将数字转化成字符

在本实例中,通过不同类型变量之间的赋值,将赋值操作后的结果进行输出,观察类型转换后的结果。具体代码如下:

01  #include <stdio.h>                                              /*包含头文件*/

02  int main()                                                       /*主函数main*/

03  {

04      int num1=65,num2=66,num3=67,num4=68,num5=69,num6=70,num7=71;/*定义变量,为变量赋初值65-71*/

05      char c1,c2,c3,c4,c5,c6,c7;                                  /*定义char型变量*/

06      c1=(char)num1;                                               /*强制转换赋值*/

07      c2=(char)num2;

08      c3=(char)num3;

09      c4=(char)num4;

10      c5=(char)num5;

11      c6=(char)num6;

12      c7=(char)num7;

13      printf("%c %c %c %c %c %c %c
",c1,c2,c3,c4,c5,c6,c7);      /*输出字符变量值*/

14      return 0;                                                       /*程序结束*/

15  }

运行程序,显示结果如图4.10所示。

 

图4.10  将数字转化成字符

 

从该实例代码和运行结果可以看出:

在实例02中定义了整型变量,然后通过强制转换将其赋给char类型的变量。因为是由高的级别向低的级别转换,所以可能会出现数据的丢失。在使用强制转换时要注意此问题。

练一练:

一辆货车运输箱子,载货区宽2米,长4米,一个箱子宽1.5米,长1.5米,请问载货区一层可以放多少个箱子?(提示:箱子数量是一个整数,不存在半个箱子)。

 

感谢读者朋友对明日科技的支持,如果您对图书中的讲解及光盘源码有任何问题,可以直接登录http://www.mingrisoft.com上的社区进行发贴,把您的问题详细的说明一下,我们的技术人员会在那里给您回复! 

本文摘自明日科技出版的《零基础学C语言》,转载请注明出处!!!

 

原文地址:https://www.cnblogs.com/mrxy/p/8065971.html