当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 关于C语言的隐式类型转换

关于C语言的隐式类型转换 时间:2018-09-26      来源:未知

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

比如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类型的,而只是在运算的过程中发生了转换。

上一篇:Android异步加载AsyncTask的使用

下一篇:谈谈socket 套接字

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部