打印
[牛人杂谈]

C语言数据类型转换

[复制链接]
429|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。例如,为了保存小数你可以将int类型的变量转换为double类型。
数据类型转换的一般格式为:(type_name) expressiontype_name为要转换到的数据类型,expression为表达式。例如:
  • (float) a;  //把a转换为实型
  • (int)(x+y);  //把x+y的结果转换为整型
  • (float) 100;  //将一个常量转换为实型


【示例】将整数转换为浮点数:
  • #include <stdio.h>
  • int main(){
  •    int sum = 17, count = 5;
  •    double mean;
  •    mean = (double) sum / count;
  •    printf("Value of mean : %f\n", mean);
  •    return 0;
  • }


运行结果:
Value of mean : 3.400000
沙发
dongnanxibei|  楼主 | 2017-3-27 16:21 | 只看该作者
需要注意的是,类型转换运算符( )的优先级高于/(double) sum / count会先将 sum 转换为 double 类型,然后再进行除法运算。如果写作(double) (sum / count),那么运行结果就是 3.000000。

这种由程序员显式进行的转换称为强制类型转换。除了强制类型转换,在不同数据类型的混合运算中编译器也会隐式地进行数据类型转换,称为自动类型转换

自动类型转换遵循下面的规则:
  • 若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。
  • 转换按数据长度增加的方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。
  • 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
  • char型和short型参与运算时,必须先转换成int型。
  • 在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。
下图表示了类型自动转换的规则:




使用特权

评论回复
板凳
天灵灵地灵灵| | 2017-3-27 19:47 | 只看该作者
为了保存小数你可以将int类型的变量转换为double类型

使用特权

评论回复
地板
643757107| | 2017-3-27 20:19 | 只看该作者
所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。

使用特权

评论回复
5
734774645| | 2017-3-27 20:57 | 只看该作者
数据的最高形式就是double。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

200

主题

3552

帖子

16

粉丝