在 C 编程中,我们可以将一种数据类型(int
、float
、double
等)的值转换为另一种。这个过程称为类型转换。让我们看一个例子,
#include <stdio.h>
int main() {
int number = 34.78;
printf("%d", number);
return 0;
}
// Output: 34
在这里,我们将双精度值 34.78 赋给整数变量 number。在这种情况下,双精度值会自动转换为整数值 34。
这种类型的转换称为隐式类型转换。C 语言中有两种类型的类型转换:
- 隐式转换
- 显式转换
C 语言中的隐式类型转换
如前所述,在隐式类型转换中,一种类型的值会自动转换为另一种类型的值。例如,
#include<stdio.h>
int main() {
// create a double variable
double value = 4150.12;
printf("Double Value: %.2lf\n", value);
// convert double value to integer
int number = value;
printf("Integer Value: %d", number);
return 0;
}
输出
Double Value: 4150.12 Integer Value: 4150
上面的例子有一个值为 4150.12 的双精度变量。请注意,我们将双精度值赋给了整数变量。
int number = value;
在这里,C 编译器会自动将双精度值 4150.12 转换为整数值 4150。
由于转换是自动进行的,因此这种类型的转换称为隐式类型转换。
示例:隐式类型转换
#include<stdio.h>
int main() {
// character variable
char alphabet = 'a';
printf("Character Value: %c\n", alphabet);
// assign character value to integer variable
int number = alphabet;
printf("Integer Value: %d", number);
return 0;
}
输出
Character Value: a Integer Value: 97
上面的代码创建了一个字符变量 alphabet,值为 'a'
。请注意,我们将 alphabet 赋给了整数变量。
int number = alphabet;
在这里,C 编译器会自动将字符 'a'
转换为整数 97。这是因为在 C 编程中,字符在内部存储为称为ASCII 值的整数值。
ASCII 定义了一组字符,用于在计算机中编码文本。在 ASCII 码中,字符 'a'
的整数值为 97,因此字符 'a'
会自动转换为整数 97。
如果您想了解更多关于查找 ASCII 值的信息,请访问查找 C 中字符的 ASCII 值。
C 语言中的显式类型转换
在显式类型转换中,我们手动将一种数据类型的值转换为另一种类型。例如,
#include<stdio.h>
int main() {
// create an integer variable
int number = 35;
printf("Integer Value: %d\n", number);
// explicit type conversion
double value = (double) number;
printf("Double Value: %.2lf", value);
return 0;
}
输出
Integer Value: 35 Double Value: 35.00
我们在上面的程序中创建了一个名为 number 的整数变量,值为 35。请注意代码,
// explicit type conversion
double value = (double) number;
这里,
(double)
- 表示 number 要转换到的数据类型number
- 要转换为double
类型的值
示例:显式类型转换
#include<stdio.h>
int main() {
// create an integer variable
int number = 97;
printf("Integer Value: %d\n", number);
// (char) converts number to character
char alphabet = (char) number;
printf("Character Value: %c", alphabet);
return 0;
}
输出
Integer Value: 97 Character Value: a
我们在上面的代码中创建了一个值为 97 的变量 number
。请注意,我们正在将此整数转换为字符。
char alphabet = (char) number;
这里,
(char)
- 将 number 显式转换为字符number
- 要转换为char
类型的值
类型转换中的数据丢失
在我们之前的示例中,当我们把双精度类型的值转换为整数类型时,小数部分的数据丢失了。
#include<stdio.h>
int main() {
// create a double variable
double value = 4150.12;
printf("Double Value: %.2lf\n", value);
// convert double value to integer
int number = value;
printf("Integer Value: %d", number);
return 0;
}
输出
Double Value: 4150.12 Integer Value: 4150
在这里,数据 4150.12 被转换为 4150。在此转换中,小数部分 .12 丢失了。
这是因为 double
是比 int
(4 字节) 更大的数据类型(8 字节),并且当我们将数据从更大的类型转换为更小类型时,会发生数据丢失。
同样,C 编程中存在数据类型层级。根据层级,如果高数据类型转换为低数据类型,则会丢失数据;如果低数据类型转换为高数据类型,则不会丢失数据。

这里,
- 数据丢失 - 如果将
long double
类型转换为double
类型 - 无数据丢失 - 如果将
char
转换为int