打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
巧学C语言数据类型转换

C语言中数据类型的转换是不是经常被它搞得头大?不着急,看了下面的讲解,一定轻轻松松学会啦~~

类型的转换

我们在整理东西时,要将不同的东西分门别类地放进不同类型的盒子中,如果把衣服放进饼干盒里显然是不合适的。在程序中也应当把不同类型的数据放进对应类型的变量中保存。在C语言中数据类型是很严格的,整型变量只能保存整数不能保存实数;实型变量只能保存实数,不能保存整数。有人问,“更高精度的实数都能存,还不能存个整数么?”是的,坚决不能!因为它们不属于同一类型。如果硬要将数据存入不同类型的变量,计算机会以变量的类型为准,自动将数据转换为与变量的类型一致,然后再存入变量。例如:

int a;

a= 2.8;

则变量a中只会保存整数2(没有四舍五入),不会保存2.8也不会保存3。又如:

double y;

y= 3;

则变量y中保存的数据是双精度实数3.0而不是整数3

这是说在赋值时,必须以盒子——变量的类型为准,大件物品要切去一部分“瘦身”后再放入“小箱子”;小件物品也要拉长、变宽再放入“大箱子”。而前者是会损失一些精度的,损失的部分直接舍去小数(不四舍五入)。这种转换是由计算机自动进行的,称自动类型转换

这一以变量类型为基准的自动类型转换规则可以口诀记忆如下:

变量定空间,塑身再搬迁。

若为空间窄,舍点也情愿。

表达式都有一个值类型。例如表达式1+1的运算结果是22就是这个表达式的值。表达式的类型就是结果值的类型,即2的类型,2int型的,所以该表达式的类型也是int型的。

在计算表达式时,参与运算的两个数的类型有可能一致,也有可能不一致。如果参与运算的两个数的类型一致,运算结果的类型就与两个数的类型一致;如果参与运算的两个数的类型不一致,则运算结果的类型以两个数中的高类型为准,结果的类型与高类型一致。高类型是指占用字节较多、精度较高的类型;低类型是指占用字节较少、精度较低的类型。几种主要数据类型由低到高的顺序依次为:char int float double。例如:

2.4+ 1.6

2.41.6都是double型,运算结果是4.0,也是double型的,而结果不能是int型的4

怎么知道2.4和1.6都是double 型的呢?直接写在程序中的数值型数据,它的类型规定为:有小数点的都为double型,无小数点的都为有符号int型(常量带字母后缀L、U、F(或小写)的除外)。如3为int型,3.1、3.0、3. 都为double型,3f为float型。注意是不是整型并不取决于数值整不整,如3.0、3. 也都为double型不是int型。

再看一例:

2.4+ 3

2.4double型,3int型;double为高类型,int为低类型,运算结果应为double型的5.4而不能为int型的5。实际上,由于2.43的类型不一致,计算机是先将3转换为double型的3.0,与2.4的类型一致后,再进行加法运算的。这称为自动类型转换

稍后我们将把这一规则总结为口诀“类型不怕乱,结果向高看”。就是说算术运算时,两个量允许类型不一致参与运算,运算结果的类型与其中较高类型量的类型一致。

int v=2;

double t=2.8;

int s;

s = v * t;

这段程序运行后s的值为5

在计算v * t时,要注意vint型,tdouble型,二者类型不一致,运算结果以较高类型为准,结果应为double型的5.6

然而,在将double型的5.6保存到s中时,发生了问题。由于sint型,只能保存整数,不能保存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*rrint型,两个r类型一致,运算结果也为int型为4。再计算4*paipaidouble型,与4类型不一致,结果以double型为准,为double型的12.56。这些都是在算术运算过程中的自动类型转换,以高类型为准。

最后将12.56赋值给int型的变量s时,不再是算术运算,而是变量赋值。这时的自动类型转换必须以变量s的空间为准,发生“塑身”——直接舍去小数仅赋值12s中。

现把算术运算的要点总结为口诀如下:

类型不怕乱,结果向高看。
整数整除商,小数门外拦。
求余 % 严,整符才能算。
括起类型字,临时强转换。


怎么样,是不是明白了很多呢?C语言学不会,很多时候往往不是我们自己太笨了,是没有找到一本适合自己的教材。同意吗?

以上所有讲解包括顺口溜均取自清华大学出版社图书《C语言其实很简单》,与普通C语言教材很不相同,讲得很通俗易懂,而且比较细致,竟然还有顺口溜帮来记知识哒。这样学习C语言就轻松多啦,小伙伴们不妨拿来一读!

《C语言其实很全国新华书店和各大网店有售。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C 之常量、变量及数据类型
《C语言程序设计(第2版)》第06章回顾数据类型和表达式
Java教程之运算符
java表达式类型的自动提升
第3章顺序程序设计
c语言中的自动类型转换
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服