C 类型转换


类型转换

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

例如,如果您尝试除两个整数,5经过2,您期望的结果是2.5。但由于我们使用的是整数(而不是浮点值),因此以下示例将仅输出2:

示例

int x = 5;
int y = 2;
int sum = 5 / 2;

printf("%d", sum); // Outputs 2
亲自试一试 »

为了获得正确的结果,您需要知道如何类型转换作品。

C语言中有两种类型的转换:

  • 隐式转换(自动地)
  • 显式转换(手动)

隐式转换

当您将一种类型的值分配给另一种类型时,编译器会自动完成隐式转换。

例如,如果您分配int值对一个 float类型:

示例

// Automatic conversion: int to float
float myFloat = 9;

printf("%f", myFloat); // 9.000000
亲自试一试 »

可以看到,编译器自动转换了int值9为浮点值9.000000

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

特别是如果是相反的话 - 下面的示例自动转换浮点值9.99为 int 值9:

示例

// Automatic conversion: float to int
int myInt = 9.99;

printf("%d", myInt); // 9
亲自试一试 »

发生了什么事.99?我们可能希望在我们的程序中使用这些数据!所以要小心。了解编译器在这些情况下如何工作非常重要,以避免出现意外结果。

另一个例子,如果你除两个整数:5经过2,你知道总和是2.5。正如您从本页开头所知道的,如果将总和存储为整数,则结果将仅显示数字2。因此,最好将总和存储为float或一个double, 正确的?

示例

float sum = 5 / 2;

printf("%f", sum); // 2.000000
亲自试一试 »

为什么是这样的结果2.00000并不是2.5?嗯,这是因为 5 和 2 的除法仍然是整数。在这种情况下,您需要手动将整数值转换为浮点值。 (见下文)。


显式转换

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

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

示例

// Manual conversion: int to 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
亲自试一试 »

由于您在上一章中了解了"decimal precision",因此您可以通过删除多余的零(如果您愿意)来使输出更加清晰:

示例

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%.1f", sum); // 2.5
亲自试一试 »