一、 整形提升
1.什么是整形提升呢?
c语言的整形算术运算总是至少以缺省整形类型的精度计算的,为了获得这个精度,表达式中的字符和短整形操作数在使用之前被转换为普通整形这就是整形提升。
int main()
{
char a = 0xb6;
if (a == 0xb6)
{
printf("hehe\n");//不打印这个
}
else
{
printf("haha\n");//打印这个
}
return 0;
}
//这里的char 类型的a进行了整形提升(过程由上图所示),a就变成了一个负数,故不等于0xb6,所以这里打印haha
二,算术转换
如果某个操作符操作的各操作数是不同类型的,那么要想进行就只有将其中一个的类型转换为另一个类型,否则无法进行运算。
排名:long double ,double ,float,unsigned long int ,long int,unsigned int ,int .
如果某个操作数的类型在上面的排名较低,那么首先要转换为另一个操作数的类型后执行运算。
1.将一种类型的数据赋值给另外- 种类型的变量时就会发生自动类型转换,如: floatf= 100; 100是int类型,会自动转换成float ,再赋值给f。
2.在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下:
a.转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int和long参与运算时,先把int类型的数据转成long类型后再进行运算。所有的浮点运算都是以双精度进行的,即使运算中只有float类型,也要先转换为double类型,才能进行运算。char和short参与运算时,必须先转换成int类型。