2
数据类型转换
GESP 二级 · 知识点 5

🔄 数据类型转换

整数和小数之间有时候会「变身」:有时是我们主动变(强制转换),有时是电脑悄悄变(隐式转换)。变身要小心,可能会丢东西哦!

考纲知识点:强制类型转换
隐式类型转换
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 二级
  1. (6)掌握数据类型的转换:强制类型转换和隐式类型转换。
📚
先学一学
花 5 分钟读完下面 5 课,再去闯关就不慌啦
1
📦 不同类型:不同的「盒子」

电脑把数据分装在不同的「盒子」里:整数盒(int)、小数盒(double)、字符盒(char)。有时候一个盒子里装不下的东西,要「变身」到另一个盒子,这就是类型转换

🤔 两种变身方式
一种是我们主动写的(强制转换),一种是电脑悄悄自动做的(隐式转换)。下面两课分别讲。
💡 口诀:不同盒子装不同东西,要换盒就先变身。
🌟 行业实际:为什么有这么多盒子?
整数用 int 省空间、算得快;小数用 double 才够精确;字符用 char 只占 1 字节。银行和游戏里算钱常用小数,可不能随手塞进整数盒,否则「分」就没了!
💡 口诀:整数 int、小数 double、字符 char,各装各的。
2
✋ 强制转换:自己写「变身咒语」

想主动变身,就写 (类型)值 这种形式,像念一句咒语「先变成某类型,再算」:

⚠️ 两个易错点
(double)9 / 2 是先把 9 变 9.0 再除 = 4.5;但若写 (double)(9/2) 就变成 4.0——咒语括住谁,谁先变身
(int)b 得到的是临时值,不能放在等号左边赋值(如 (int)b = a 不合法),b 本身的类型也不会被改变。
💡 口诀:强制转换 = 先变身再算;小数部分直接截断,不四舍五入;结果只是临时值。
🆚 易混对比:截断 vs 四舍五入
(int)3.9 = 3(直接扔小数,不是 4);(int)3.1 = 3。想四舍五入要自己写 (int)(x + 0.5)。记住:强制转换永远截断
💡 口诀:强制转换只截断,从不四舍五入。
3
🤫 隐式转换:电脑悄悄帮你变

运算时,电脑会自动把「小盒子」升级成「大盒子」再算,这叫隐式转换。几条铁律:

🆚 易混对比:int × int 不会偷偷变 double
int a = 2; a = a * 10; 结果还是 int(20),类型不变(干扰项「变成 double」错)。只有和小数一起运算时,int 才会隐式变 double。
💡 口诀:整数相除取整丢小数;'1' 是 49 不是 1;int×int 还是 int。
4
🔬 浮点误差与截断的实战坑

最著名的两个坑都在「小数」上,考试年年考:

⚠️ 坑一:浮点误差 0.1 + 0.2 ≠ 0.3
0.1 + 0.2 实际约等于 0.30000000000000004并不恰好等于 0.3,所以 0.1 + 0.2 == 0.3 结果是假。电脑里的小数像量不精准的尺子,会有极小误差。
💡 口诀:小数有误差,0.1+0.2≠0.3,别用 == 直接比。
⚠️ 坑二:小数塞进整数会丢尾巴
45.6 赋给 char、或 int 用 cin 读入 59.99,小数部分都会丢失(变成 59),程序不会报错但结果悄悄变了。平行四边形面积:高 3.7 先存进 int 变 3,5×3=15(不是 18.5)。
💡 口诀:小数进整数盒,尾巴被剪掉;45.6→45、59.99→59、3.7→3。
5
🧩 综合对比与行业实际
📊 一张表分清两类转换
· 强制转换:自己写 (类型)值,主动、截断、结果是临时值。
· 隐式转换:运算时电脑自动变(int 遇 double 变 double、char 变 int、bool 变 0/1)。
· a *= ba = a * b 的复合赋值(如 2*5=10)。
💡 口诀:强制主动写、隐式自动变;a*=b 就是 a=a*b。
🌟 行业实际:溢出真会闯祸
2004 年日本一次火箭发射失败,就是程序里大数溢出没人察觉。整数相乘(如 10 万×10 万)一旦超过 int 上限,电脑不报错,却给出「绕回来」的负数——所以重要计算要用更大的 long long 盒子。
💡 口诀:大数相乘会溢出,不报错但结果错;重要场合用大盒子。
🎯
闯关小锦囊 · 考点提醒
🎮
学完了?来闯关!
下面 12 个小挑战,点一点就能玩

Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。