C 类型转换

类型转换

有时,您必须将一种数据类型的值转换为另一种类型。这被称为类型转换

例如,如果您尝试将两个整数 52 相除,您期望的结果应该是 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

亲自试一试

如您所见,编译器自动将 int9 转换为 float9.000000

这可能存在风险,因为在某些情况下您可能会失去对特定值的控制。

特别是如果反过来 - 以下示例自动将浮点值 9.99 转换为 int9

实例

// 自动转换: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?嗯,这是因为 52 的除法仍然是整数。在这种情况下,您需要手动将整数值转换为浮点值。(见下文)。

显式转换

显式转换是通过将类型放在值前面的括号 () 中来手动完成的。

考虑到上面示例中的问题,我们现在可以获得正确的结果:

实例

// 手动转换: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);

亲自试一试