请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 238|回复: 8

[C语言] C语言数据类型转换

[复制链接]

3172

主题

3269

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22685
发表于 2015-12-24 21:37:25 | 显示全部楼层 |阅读模式
数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。例如,为了保存小数你可以将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

需要注意的是,类型转换运算符( )的优先级高于/(double) sum / count会先将 sum 转换为 double 类型,然后再进行除法运算。如果写作(double) (sum / count),那么运行结果就是 3.000000。

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

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

下图表示了类型自动转换的规则:
1.jpg
【示例】自动数据类型转换。
  • #include<stdio.h>
  • int main(){
  •     float PI=3.14159;
  •     int s1, r=5;
  •     double s2;
  •     s1 = r*r*PI;
  •     s2 = r*r*PI;
  •     printf("s1=%d, s2=%f\n", s1, s2);
  •     return 0;
  • }


运行结果:
s1=78, s2=78.539753

在计算表达式r*r*PI时,r 和 PI 都转换成double类型,表达式的结果也为double类型。但由于 s1 为整型,所以赋值运算的结果仍为整型,舍去了小数部分。
注意是将小数部分直接丢掉,而不是按照四舍五入向前舍入。

无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。请看下面的例子:
  • #include<stdio.h>
  • int main(){
  •     float f=5.75;
  •     printf("(int)f=%d, f=%f\n",(int)f, f);
  •     return 0;
  • }


运行结果:
(int)f=5, f=5.750000
回复

使用道具 举报

0

主题

775

帖子

783

积分

高级会员

Rank: 4

积分
783
发表于 2016-1-12 19:11:55 | 显示全部楼层
谢谢您的分享!
回复 支持 反对

使用道具 举报

2

主题

1048

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2016-2-5 11:20:42 | 显示全部楼层
学习贵在坚持哦
回复 支持 反对

使用道具 举报

0

主题

842

帖子

6

积分

注册会员

Rank: 2

积分
6
发表于 2016-2-8 10:54:57 | 显示全部楼层
太给力啊 跪谢啊
回复 支持 反对

使用道具 举报

0

主题

895

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2017-4-12 10:25:48 | 显示全部楼层
大神啊!豁然开朗。。。。。。
回复 支持 反对

使用道具 举报

0

主题

700

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2017-4-16 20:12:56 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报

8

主题

1005

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2018-1-16 14:54:24 | 显示全部楼层
很不错的帖子,又学到了,力挺
回复 支持 反对

使用道具 举报

1

主题

1041

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2018-7-26 21:34:35 | 显示全部楼层
一下子解决了我工作当中的难题,谢谢楼主,非常感谢!
回复 支持 反对

使用道具 举报

4

主题

1004

帖子

195

积分

注册会员

Rank: 2

积分
195
发表于 2018-10-13 18:53:53 | 显示全部楼层
还有许多问题不明白,有点恼火啊!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-11-18 18:45 , Processed in 0.242795 second(s), 33 queries .

快速回复 返回顶部 返回列表