类型转换

转换分隐式(编译器自动)与显式(你强制)。嵌入式里乱转指针很危险,先掌握数值转换。

1. 概念例子:整数除法陷阱

C
1int a = 7, b = 2;
2int r1 = a / b; // 3,不是 3.5
3double r2 = (double)a / b; // 3.5
4double r3 = a / (double)b; // 也是 3.5

2. 截断方向

C
1double x = 3.99;
2int y = (int)x; // 3,向零截断,不是四舍五入

3. 范围与符号变化

4. 完整小例子

C
1#include <stdio.h>
2 
3int 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}