C 教程

C 教程 C 语言简介 C 下载安装和环境配置 C 快速入门 C 语法 C 输出 C 注释 C 变量 C 数据类型 C 常量 C 运算符 C 布尔值 C If...Else 语句 C Switch 语句 C While 循环 C For 循环 C Break/Continue 语句 C 数组 C 字符串 C 用户输入 C 内存地址 C 指针

C 函数

C 函数 C 函数参数 C 作用域 C 函数声明 C 递归 C 数学函数

C 文件

C 创建文件 C 写入文件 C 读取文件

C 结构体

C 结构体 C 嵌套结构体 C 结构体和指针 C 联合体 C typedef

C 枚举

C 枚举

C 内存

C 内存管理

C 错误

C 错误 C 调试 C 空值 C 错误处理 C 输入验证

C 更多

C 日期 C 随机数 C 宏 C 代码组织 C 存储类 C 位运算符 C 固定宽度整数

C 项目

C 项目

C 参考资料

C 参考资料 C 关键词 C <stdio.h> C <stdlib.h> C <string.h> C <math.h> C <ctype.h> C <time.h>

C 标准库参考

C 标准库 - 参考手册 C 标准库 - <assert.h> C 标准库 - <ctype.h> C 标准库 - <errno.h> C 标准库 - <float.h> C 标准库 - <limits.h> C 标准库 - <locale.h> C 标准库 - <math.h> C 标准库 - <setjmp.h> C 标准库 - <signal.h> C 标准库 - <stdarg.h> C 标准库 - <stddef.h> C 标准库 - <stdio.h> C 标准库 - <stdlib.h> C 标准库 - <string.h> C 标准库 - <time.h>

C 实例

C 语言实例 C 经典100例 C 编译器 C 测验


C 类型转换

类型转换

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

例如,如果你尝试将两个整数相除,5 通过 2,你会期望结果是 2.5。但由于我们处理的是整数(而不是浮点值),以下示例将仅输出 2:

示例

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

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

要获得正确的结果,您需要了解类型转换的工作原理。

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

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

隐式转换

当您将一种类型的值赋给另一种类型的值时,编译器会自动执行隐式转换。

例如,如果您将一个 int 值赋给一个 float 类型值:

示例

// 自动转换:整数到浮点数
float myFloat = 9;

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

如您所见,编译器会自动将 int 值 9 转换为 float 值 9.000000。

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

尤其是反过来的时候——以下示例会自动将浮点值9.99转换为整数值9:

示例

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


显式转换

显式转换是通过将类型放在括号 () 中,并置于值之前手动完成的。

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

示例

// 手动转换:整数转浮点数
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 = 423;

/* 计算用户得分占最高可用得分的百分比。
将下划线转换为浮点数,以确保除法运算准确无误。 */
float percentage = (float) userScore / maxScore * 100.0;

// 打印百分比
printf("User's percentage is %.2f", percentage);
亲自试一试 »