目录
一、自动类型转换规律
不同的基本数据类型在进行混合计算时,计算机会进行自动类型转换,规律如下:
根据上图,在多种类型数据混合计算中,计算机中自动将所有数据转换成等级更高的数据类型,由低字节数据类型向高字节数据类型即图中从下向上自动转换。
#include<stdio.h>
int main()
{
printf("%d %f\n", 7 / 2, 7.0 / 2);//以%f输出时,int类型自动转换成float类型
printf("混合计算时,float类型等级最高,其他类型向float转换,结果为float类型即4字节: %d\n", sizeof(7 + 8LL + 0.1f)); //
printf("浮点数默认为double类型,结果为double类型即8字节: %d\n", sizeof('A' + 9ULL + 0.8f + 0.0));
//定点存储向浮点存储转换,即整数向小数转换
return 0;
}
计算结果向高等级对齐!定点存储向浮点存储对齐!有符号向无符号转换!
二、强制类型转换
如果不想进行自动类型转换,我们可以自行定义类型即强制类型转换
强制类型转换的写法:(数据类型)表达式
int a = 3.14; //自动类型转换
int b = (int)3.14; //强制类型转换
(float) a 把a转换为浮点型,(int)(x+y) 把x+y的结果转换为整型.
#include<stdio.h>
int main()
{
printf("强制转换为float4字节类型:%d\n", sizeof((float)3 + 8LL));
printf("%d %f 转换为double8字节:%d\n", 7 / 2, (double)7 / 2,sizeof((double)7 / 2));//强制类型转换
printf("单引号下字符A为int类型,通过char强制转换为char类型1个字节:%d\n", sizeof((char)'A'));
printf("由整数8向浮点数强制转换结果为float类型:%f 括号优先级高,先整型会舍去小数:%f\n", (float)8 / 3, (float)(8 / 3));
return 0;
}
注:自动类型转换和强制类型转换都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。因为那块内存本来就存的那个数,只是换个形式使用而已。