02.类型转换
类型转换
在开发中经常需要涉及类型之间的相互转换。
首先我们先观察一个例子
int *p;
char c;
short s;
int n;
long l;
float f;
double d;
p = c; // 警告, 将 char 赋值给 int * 没有进行强制类型转换
p = s; //
p = n; //
p = l; //
p = f; // 错误 float 不可以转换为 int *
p = d; // 错误 double 不可以转换为 int *
有符号数字类型转换
概念: 比 int 小的都转为 int ,比int大的不变
int *p;
char c;
short s;
int n;
long l;
p = c + c; // int
p = s + s; // int
p = n + n; //int
p = l + l; // long int
无符号数字类型转换
概念: 比 int 小的都转为 int , unsigned int 还是自身, unsigned long 也是自身
int < unsigned int < unsigned long
浮点转换是相同类型
int *p;
float f;
double d;
p = f + f; // float
p = d + d; // double
float < double
不同类型之间的转换
int *p;
char c;
short s;
int n;
long l;
p = c + s; // int
p = c + n; // int
p = c + l; // long int
int *p;
unsigned char c;
unsigned short s;
unsigned int n;
unsigned long l;
p = c + s; // int
p = c + n; //unsigned int
p = c + l; // long unsigned int
p = n + l; // long unsigned int
int *p;
char c;
short s;
int n;
long l;
unsigned char uc;
unsigned short us;
unsigned int un;
unsigned long ul;
p = c + uc;
p = s + us;
p = c + n;
p = c + un;
p = l + ul;
从以上的例子可以看出自动类型转换的规律: 小于int的类型都自动类型转换为int型,int自身就是int型,大于int型自动类型转换时转换为最大类型向,类型大小排序:
char < unsigned char < short < unsigned short < int < unsigned int < long < unsigned long < float < double
不同类型的浮点型运算 float 转换成 double;
注意
- 任何整数类型与float运算都会转为float型
- 任何整数类型与double运算都会转为double型
总结:
隐式转换:
- 比 int 小的全部转换为 int 在进行运算
- int 以上的包括 int , 看 哪个大,哪个大就听哪个的
- 与浮点型就运算,都转换为浮点型。
- float 比 double 小,float 和 double 运算,转换都double
强制类型转换
公式: (类型)需要转换的数据
int n1 = 5, n2 = 2;
printf("%f \n", (float)n1 / n2);
printf("%f \n", (double)n1 / n2);
License:
CC BY 4.0