如果某个操作符的各个操作数属于不同类型,那么除非其中一个操作数转换为另一个操作数的类型,否则操作就无法进行。下面体系称为寻常算术转换
long double
double
float
unsigned long int
long int
unsigned int
int
short
char
如果某两个操作数的类型存在差异,那么就要先将在这个表上排名较低的操作数转换为另一个排名较高的操作数类型后执行运算。
但是转换要合理,不然会出现一些潜在问题。
exp1:
float f = 3.14;
int num = f;//这里隐式转换,会有精度丢失。
这里举一个程序的例子:
#include <stdio.h>
int i;//全局变量如果没有初始化,默认会被初始化为0
int main()
{
i--;//-1
//sizeof 是一个操作符,这个操作符返回的结果是size_t的,size_t是无符号整型
//算术转换 int ->unsigned int
//11111111111111111111111111111111
if (i > sizeof(i))
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
无符号i就会是一个非常大的数
这里就会运行>