C语言中数据类型的转换是不是经常被它搞得头大?不着急,看了下面的讲解,一定轻轻松松学会啦~~
类型的转换
我们在整理东西时,要将不同的东西分门别类地放进不同类型的盒子中,如果把衣服放进饼干盒里显然是不合适的。在程序中也应当把不同类型的数据放进对应类型的变量中保存。在C语言中数据类型是很严格的,整型变量只能保存整数不能保存实数;实型变量只能保存实数,不能保存整数。有人问,“更高精度的实数都能存,还不能存个整数么?”是的,坚决不能!因为它们不属于同一类型。如果硬要将数据存入不同类型的变量,计算机会以变量的类型为准,自动将数据转换为与变量的类型一致,然后再存入变量。例如:
int a;
a= 2.8;
则变量a中只会保存整数2(没有四舍五入),不会保存2.8也不会保存3。又如:
double y;
y= 3;
则变量y中保存的数据是双精度实数3.0而不是整数3。
这是说在赋值时,必须以盒子——变量的类型为准,大件物品要切去一部分“瘦身”后再放入“小箱子”;小件物品也要拉长、变宽再放入“大箱子”。而前者是会损失一些精度的,损失的部分直接舍去小数(不四舍五入)。这种转换是由计算机自动进行的,称自动类型转换。
这一以变量类型为基准的自动类型转换规则可以口诀记忆如下:
变量定空间,塑身再搬迁。
若为空间窄,舍点也情愿。
表达式都有一个值和类型。例如表达式1+1的运算结果是2,2就是这个表达式的值。表达式的类型就是结果值的类型,即2的类型,2是int型的,所以该表达式的类型也是int型的。
在计算表达式时,参与运算的两个数的类型有可能一致,也有可能不一致。如果参与运算的两个数的类型一致,运算结果的类型就与两个数的类型一致;如果参与运算的两个数的类型不一致,则运算结果的类型以两个数中的高类型为准,结果的类型与高类型一致。高类型是指占用字节较多、精度较高的类型;低类型是指占用字节较少、精度较低的类型。几种主要数据类型由低到高的顺序依次为:char → int → float → double。例如:
2.4+ 1.6
2.4和1.6都是double型,运算结果是4.0,也是double型的,而结果不能是int型的4。
再看一例:
2.4+ 3
2.4是double型,3是int型;double为高类型,int为低类型,运算结果应为double型的5.4而不能为int型的5。实际上,由于2.4和3的类型不一致,计算机是先将3转换为double型的3.0,与2.4的类型一致后,再进行加法运算的。这称为自动类型转换。
稍后我们将把这一规则总结为口诀“类型不怕乱,结果向高看”。就是说算术运算时,两个量允许类型不一致参与运算,运算结果的类型与其中较高类型量的类型一致。
int v=2;
double t=2.8;
int s;
s = v * t;
这段程序运行后s的值为5。
在计算v * t时,要注意v是int型,t是double型,二者类型不一致,运算结果以较高类型为准,结果应为double型的5.6。
然而,在将double型的5.6保存到s中时,发生了问题。由于s是int型,只能保存整数,不能保存double型的实数。于是5.6先被转换为整数5,再赋值到s中,s最终的值为整数5。这一步就是在2.2.2.4小节中介绍的“变量定空间,塑身再搬迁。若为空间窄,舍点也情愿。”
小结一下:自动类型转换有两种。2.2.2.4小节介绍的是一种,它发生在变量赋值过程中。本小节介绍的“类型不怕乱,结果向高看”是第二种,它发生在算术运算的过程中。
这两种自动类型转换的方式是不同的,前者是以变量空间的类型为准,任何数据都要“将就”变量空间才能被赋值;若变量空间的类型“低”(如int),实数也要被截断小数赋值,损失精度也在所不惜!
而后者是在表达式求值过程中(没有为变量赋值),它是以高类型为准,运算结果的类型与高类型一致,总保证运算精度。
在s = v * t; 语句中,先后发生了这两种自动类型转换。
【程序例2.2】数据类型的自动转换。
main()
{ double pai=3.14;
int s, r=2;
s = r * r * pai;
printf("s=%d\n", s);
}
程序的输出结果为:
s=12
先做r*r,r为int型,两个r类型一致,运算结果也为int型为4。再计算4*pai,pai为double型,与4类型不一致,结果以double型为准,为double型的12.56。这些都是在算术运算过程中的自动类型转换,以高类型为准。
最后将12.56赋值给int型的变量s时,不再是算术运算,而是变量赋值。这时的自动类型转换必须以变量s的空间为准,发生“塑身”——直接舍去小数仅赋值12到s中。
现把算术运算的要点总结为口诀如下:
类型不怕乱,结果向高看。
整数整除商,小数门外拦。
求余 % 严,整符才能算。
括起类型字,临时强转换。
怎么样,是不是明白了很多呢?C语言学不会,很多时候往往不是我们自己太笨了,是没有找到一本适合自己的教材。同意吗?
以上所有讲解包括顺口溜均取自清华大学出版社图书《C语言其实很简单》,与普通C语言教材很不相同,讲得很通俗易懂,而且比较细致,竟然还有顺口溜帮来记知识哒。这样学习C语言就轻松多啦,小伙伴们不妨拿来一读!
《C语言其实很全国新华书店和各大网店有售。
联系客服