Hi,欢迎来到中国嵌入式培训高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养13年!
当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > 关于C语言的隐式类型转换
关于C语言的隐式类型转换
时间:2016-11-08作者:华清远见

同种数据类型的变量在进行运算的时候,我们都知道怎么去运算

比如int a = 5, b = 10;

那么a+b的结果也是int类型的;

如果是不同的数据类型的变量在进行混合运算的时候,就需要将其转换成同种数据类型,然后再进行运算

比如:int = 5;

float b = 10.5;

a+b的结果是多少呢?

这就牵扯到了我们所说的隐式类型转换啦,我们先来看一副图:

从上图中,我们可以看到,float类型转换成了double类型的,int类型也要转换成double的,然后才可以进行运算,也就是说a+b的结果就是15.5啦

我们来验证一下:

我们看到代码运行的结果a+b的结果为浮点数,大家可以试一下,14行代码如果改成%d的话,编译时就会有类型不匹配的警告,所以int类型与float类型在进行混合运算的时候,都转换成了double类型。

再继续回到图2-3,我们可以看到图中有两个方向的箭头,都分别表示什么意思呢?

同样我们举例说明,先来看竖向箭头:

我们可以看到a+b的结果是大于0的,那么也就是说int类型与unsigned int类型在进行混合运算的时候,先转换为unsigned int类型,然后再进行运算。

同样,我们再来看一个横向箭头的例子:

可以发现,sizeof(a+b)的结果为4,如果a+b还是char类型的话,结果应该是1,我们结合图2-3,也就是说char类型在进行运算的时候,势必要向int类型转换,不管有没有进行混合运算。

再来看一个例子:

打印的结果为a + b <= 0,结合图2-3,我们可以推断出char类型与unsigned char在进行运算时,都转换成了int类型,同样,如果将char改成short,unsigned char改成unsigned short,结果也是a + b <= 0,那就说明了short与unsigned short在进行运算时,也都转换成了int。

所以:我们可以总结出,竖向箭头表示不同的数据类型在进行混合运算的时候,会有一个低字节向高字节转换的过程,横向箭头表示不管该类型有没有进行混合运算都势必会进行转换,再进行运算,但是需要注意:比如int类型与double类型进行运算,不是int->unsigned->long->double这么一个过程,而是int类型会直接转换成double类型。

最后,再强调一点,我们说int与double类型运算时,int会转换成double,如下图:

我们可以看出,在编译时,出现了警告,说明实际上a的类型实质上并没有转换成double类型的,而只是在运算的过程中发生了转换。


发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
迎鸡年 IT培训课程大促 最高可省1599元!

全国免费咨询电话:400-706-1880,双休日及节假日请致电值班手机:15010390966

在线咨询: 曹老师QQ(619366077), 余老师QQ(2657985593), 李老师QQ(2814652411), 徐老师QQ(1462495461)

企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300)

Copyright 2004-2017 华清远见教育集团 版权所有 ,沪ICP备10038863号,京公海网安备110108001117号