类型转换基本上是从一种类型到另一种类型的转换。类型转换有两种:
1.隐式类型转换
也称为“自动类型转换”。
- 由编译器自行完成,无需用户进行任何外部触发。
- 通常在表达式中存在多个数据类型时发生。在这种情况下,进行类型转换(类型提升)以避免数据丢失。
- 变量的所有数据类型都升级为数据类型最大的变量的数据类型。
bool -> char -> short int -> int ->
unsigned int -> long -> unsigned ->
long long -> float -> double -> long double
- 隐式转换可能丢失信息,可能丢失符号(当signed隐式转换为unsigned时),并且可能发生溢出(当long long隐式转换为float时)。
隐式转换示例:
// An example of implicit conversion
#include<stdio.h>
int main()
{
int x = 10; // integer x
char y = 'a'; // character c
// y implicitly converted to int. ASCII
// value of 'a' is 97
x = x + y;
// x is implicitly converted to float
float z = x + 1.0;
printf("x = %d, z = %f", x, z);
return 0;
}
输出:
x = 107, z = 108.000000
2.显式类型转换
这个过程也被称为类型转换,它是用户定义的。在这里,用户可以对结果进行类型转换,使其成为特定的数据类型。
语法:
(type) expression
type表示最终结果将转换为的数据类型。
// C program to demonstrate explicit type casting
#include<stdio.h>
int main()
{
double x = 1.2;
// Explicit conversion from double to int
int sum = (int)x + 1;
printf("sum = %d", sum);
return 0;
}
输出:
sum = 2
类型转换的优点:
- 这样做是为了利用类型层次结构或类型表示的某些特性。
- 它帮助我们计算包含不同数据类型变量的表达式。
参考文档
[1]Ankita Dutta.Type Conversion in C[EB/OL].https://www.geeksforgeeks.org/type-conversion-c/,2020-12-25.