在编程语言中,类型转换可以分为两种主要类型:隐式转换和显式转换
隐式转换:
隐式转换是在不需要明确指定的情况下自动发生的类型转换。这种转换由编译器自动完成,通常是为了保持表达式的一致性,避免出现错误或警告。
1.算术转换:
在C语言中,算术转换按照类型的"等级"进行,高等级的类型会将低等级的类型转换为自己的类型。以下是一些常见的类型,按照从高到低的等级:
- long double
- double
- float
- unsigned long long int
- long long int
- unsigned long int
- long int
- unsigned int
- int
- unsigned short
- short
- char
- _Bool
- 这个列表是基于一般情况,具体情况可能因编译器和系统而异。在算术运算中,较低等级的类型会被自动提升为较高等级的类型,以便进行运算。这种提升保留了值的精度,防止信息丢失。
- 举几个例子:
char c = 65; int i = c; // c 被提升为 int //--------------------------------------- char c = 65; int i = 10; float f = 3.14; float result = c + i + f; // c 被提升为 int,然后 i 被提升为 float //----------------------------------------- char c = 65; int i = 10; long l = 1000; long result = c + i + l; // c 和 i 被提升为 long
2.赋值转换
1..小类型赋给大类型: 如果将一个小类型的值赋给一个大类型的变量,小类型的值会被自动提升为大类型也就是上面的自动类型转换
int i = 1;
float j = i;//i自动转成float型赋给j但是i还是原来的类型int
//---------------------------------------------------
char c = 'A';
int i = c; // c 被提升为 int
2.大类型赋给小类型: 如果将一个大类型的值赋给一个小类型的变量,可能发生截断(Truncation)或溢出(Overflow)。编译器可能会发出警告,但不会阻止赋值操作。
int i= 256;
char j= i;
//i:0000 0000 0000 0000 0000 0001 0000 0000
//截断 0000 0000
显式转换(强制类型转换)
这是最常见的强制类型转换方式。在使用这个运算符时,将要转换的数据放在括号内,并在括号前面放上目标类型。
强制类型转换运算符 :
这是最常见的强制类型转换方式。在使用这个运算符时,将要转换的数据放在括号内,并在括号前面放上目标类型
int x = 10;
double y = (double)x; // 将整数 x 转换为浮点数 double
类型转换函数:
C 语言中也允许使用类型转换函数进行显式转换。这些函数的名称与目标类型相同,可以通过调用这些函数来进行类型转换。
int x = 10;
double y = double(x); // 使用类型转换函数将整数 x 转换为浮点数 double