C 类型转换
类型转换
有时,您必须将一种数据类型的值转换为另一种类型。这被称为类型转换。
例如,如果您尝试将两个整数 5 和 2 相除,您期望的结果应该是 2.5。但由于我们处理的是整数(而不是浮点值),因此以下示例只会输出 2:
实例
int x = 5; int y = 2; int sum = 5 / 2; printf("%d", sum); // 输出 2
要获得正确的结果,您需要了解类型转换的工作原理。
C 语言中有两种类型的转换:
- 隐式转换(自动)
- 显式转换(手动)
隐式转换
当您将一种类型的值分配给另一种类型时,编译器会自动进行隐式转换。
例如,如果将 int
值分配给 float
类型:
实例
// 自动转换:int 转 float float myFloat = 9; printf("%f", myFloat); // 9.000000
如您所见,编译器自动将 int
值 9 转换为 float
值 9.000000。
这可能存在风险,因为在某些情况下您可能会失去对特定值的控制。
特别是如果反过来 - 以下示例自动将浮点值 9.99 转换为 int
值 9:
实例
// 自动转换:float 转 int int myInt = 9.99; printf("%d", myInt); // 9
.99 去哪儿了?我们可能需要在程序中使用该数据!所以要小心。了解编译器在这些情况下的工作方式很重要,以避免出现意外的结果。
再举一个例子,如果将两个整数 5 除以 2,则总和为 2.5。从本页开始您就知道,如果将总和存储为整数,结果将仅显示数字 2。因此,最好将总和存储为浮点型或双精度型,对吗?
实例
float sum = 5 / 2; printf("%f", sum); // 2.000000
为什么结果是 2.00000 而不是 2.5?嗯,这是因为 5 和 2 的除法仍然是整数。在这种情况下,您需要手动将整数值转换为浮点值。(见下文)。
显式转换
显式转换是通过将类型放在值前面的括号 ()
中来手动完成的。
考虑到上面示例中的问题,我们现在可以获得正确的结果:
实例
// 手动转换:int 到 float float sum = (float) 5 / 2; printf("%f", sum); // 2.500000
您还可以将类型放在变量前面:
实例
int num1 = 5; int num2 = 2; float sum = (float) num1 / num2; printf("%f", sum); // 2.500000
由于您在前一章中学习了“小数精度”,因此您可以通过删除多余的零(如果您喜欢的话)来使输出更加整洁:
实例
int num1 = 5; int num2 = 2; float sum = (float) num1 / num2; printf("%.1f", sum); // 2.5
现实生活中的例子
以下是一个关于数据类型和类型转换的真实示例,我们创建一个程序来计算用户得分与游戏中最高得分的百分比:
实例
// 设置游戏中可能的最高得分为 500 int maxScore = 500; // 用户的实际评分 int userScore = 420; /* 计算用户得分与最高可用得分的百分比 将userScore转为float,确保除法准确 */ float percentage = (float) userScore / maxScore * 100.0; // 打印百分比 printf("User's percentage is %.2f", percentage);