c 语言数据类型转换是数据类型章节核心考点,分为自动类型转换也就是隐式转换,和强制类型转换也就是显式转换两种,当表达式里面同时存在 int,float,double 不同类型数据参与运算的时候,编译器会自动把低类型转换成高类型再计算,这个就是自动转换,不需要程序员写代码干预;强制类型转换是程序员主动在变量前面加括号写明目标类型,人为改变数据类型,常用于除法取整,计算结果保留小数,考试编程题选择题经常考察自动转换规则,很多同学做整数除法的时候,两个 int 相除结果仍然是整数,小数部分直接截断,想要得到小数结果就必须使用强制类型转换,这也是实验作业最常见逻辑错误,类型转换的时候要留意精度丢失,把 double 转成 int 会直接舍弃小数,不会四舍五入,这点经常出判断题。
自动类型转换(隐式转换)
转换方向按照数据表示范围从小到大:char short → int → unsigned int → long → float → double
运算时,级别低的数据自动提升成级别高的数据,运算结果就是高类型
举例 int + double,int 自动转成 double,最后结果是 double
特点 编译器自动完成,不需要额外书写转换符号
强制类型转换(显式转换)
语法格式 (目标类型)(表达式)
程序员主动指定转换类型,可以把高类型转为低类型
典型场景 int a=5,b=2,a/b 结果是 2,如果写成 (double) a /b,就会得到 2.5
注意 高类型转低类型会截断小数,存在精度丢失风险
对比表格
类别 别称 是否手动书写 特点
自动类型转换 隐式转换 不需要 低类型自动提升为高类型
强制类型转换 显式转换 需要写 (类型) 人为指定转换,可能精度丢失
运算示例
整数除法错误写法
int a=7,b=2;
printf ("% d",a/b); 结果是 3,小数直接去掉
强制转换正确写法
int a=7,b=2;
printf ("% f",(double) a /b); 结果是 3.5
学习步骤
第一步 记住类型提升顺序,理解从小到大自动转换规则
第二步 区分自动转换和强制转换语法差别
第三步 重点练习整数除法转小数这个经典题型
第四步 理解高类型转低类型截断原理,知道不会四舍五入
第五步 上机测试,观察不同转换之后输出结果变化
重点注意事项
第一 自动转换只会往更大范围类型提升,不会自动缩小类型
第二 double 转 int 只是截断小数,不是四舍五入,判断题高频坑点
第三 强制转换不会改变原来变量本身类型,只是本次表达式临时转换
第四 两个 int 做除法,哪怕接收变量是 double,如果没有强制转换,依然先做整数除法再转换
第五 unsigned 和 signed 混合运算,转换规则特殊,考试拓展考点
【常见问题】
问题 1 c 语言数据类型转换里面自动转换是往大类型还是小类型转换
回答 1 c 语言数据类型转换的自动隐式转换,是把低级别小范围类型自动提升成大范围高级别类型,不会自动缩小类型。
问题 2 c 语言数据类型转换 double 转 int 会四舍五入吗
回答 1 c 语言数据类型转换中 double 强制转为 int,是直接截断小数部分,不会进行四舍五入,属于考试高频判断题考点。
问题 3 c 语言数据类型转换为什么两个整数相除得不到小数
回答 1 c 语言数据类型转换里两个 int 变量做除法,本身属于整数除法,小数直接舍弃,需要使用强制类型转换把其中一个转为 double,才能得到小数结果。
【免责申明】
本文内容仅用于 c 语言课程基础知识学习参考,不同编译器对特殊混合类型转换细节存在细微差异,请以本校教材和考试大纲为准,因理解偏差造成答题或者代码错误,相关风险由使用者自行承担。


