C语言强制类型转换
什么是强制类型转换?
强制类型转换是把变量从一种类型转换为另一种数据类型;
强制转换有两种类型:
- 显示强制转换,由开发人员强制指定, 如 (int)1.0
- 隐式强制转换,由编译器执行
C 显示类型强制转换
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int x = 5;
int y = 10;
float rs = (float)x / y;
printf("float value = %lf", rs);
return 0;
}
运行结果为
float value = 0.500000
这种方式 就是通过 在要强制转换的类型添加 () 就可以了
C 隐式类型强制转换
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int x = 3;
float y = 5.5;
float rs1 = x + y;
int rs2 = x + y;
printf("rs1 = %f \n", rs1);
printf("rs2 = %d", rs2);
return 0;
}
运行结果为
rs1 = 8.500000
rs2 = 8
- rs1 = 8.500000 是因为我拉接收结果为float 类型,所以编译器就隐式的把结果强制转换为float类型,
- rs2 = 8 是因为我拉接收结果为 int 类型,所以编译器就隐式的把结果强制转换为int类型,当然这过程会丢失精度, 其原因是由于int 类型的空间占用小于float类型
C 整数提升
整数提升是指把小于 int 或 unsigned int 的整数类型转换为 int 或 unsigned int 的过程。
示例如下,在 int 中添加一个字符:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MIN(x, y) ((x)<(y)?(x):(y))
int main()
{
int x = 2;
char p = 'p'; /* ascii 值是 112 */
int sum = x + p;
printf("x + p = %d\n", sum );
return 0;
}
运行结果为
x + p = 114
|
|
|
C 算术转换
提升顺序由小到大:
int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long -> float -> double -> long double
示例如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int x = 10;
char p = 'p'; /* ascii 值是 112 */
int sum = x + p;
printf("x + p = %d\n", sum );
return 0;
}
运行结果为
x + p = 122
它是如何得到122 ?
关键在于 int sum = x + p; 因为我们定义结果为int 类型, 而p 为 char 类型, 所以此时编译器会把p进行算术转换,等到p = 112, 然后再运行 加法运算!