类型转换
转换分隐式(编译器自动)与显式(你强制)。嵌入式里乱转指针很危险,先掌握数值转换。
1. 概念例子:整数除法陷阱
| 1 | int a = 7, b = 2; |
| 2 | int r1 = a / b; // 3,不是 3.5 |
| 3 | double r2 = (double)a / b; // 3.5 |
| 4 | double r3 = a / (double)b; // 也是 3.5 |
2. 截断方向
| 1 | double x = 3.99; |
| 2 | int y = (int)x; // 3,向零截断,不是四舍五入 |
3. 范围与符号变化
- 大范围转小范围可能丢高位
- 有符号/无符号混用要极其小心(整数提升规则较绕)
- 字符与整数互转常见且有用
4. 完整小例子
| 1 | #include <stdio.h> |
| 2 | |
| 3 | int main(void) { |
| 4 | int score = 87; |
| 5 | double percent = (double)score / 100.0 * 100.0; |
| 6 | printf("score=%d percent=%.1f%%\n", score, percent); |
| 7 | return 0; |
| 8 | } |