C语言强制类型转换
记录下自己学习笔记
int main()
{int a = 123456789;
float f = 123456789.0;
double b = (double)a;
float *c = (float *)&a;
/*注意以上两个强制类型转换的区别
第一个直接对内存对象强制类型转换,
编译器会先将123456789转换为123456789.0(即相当于创建了中间变量 temp = 123456789.0)
然后将其以浮点数的类型存储到内存中(即double b = temp)
第二个只是用float类型指针指向内存区域
c指向的内存中仍是以整数形式存储的,
若采用printf输出,则按照原内存中形式直接采用浮点数格式进行输出
*/
printf("%x\n",&a);
printf("%x\n",c);
printf("%lf\n",b);
printf("%f\n", *c);
printf("%f",f);
/*
float和double的精度是由尾数的位数来决定的。
浮点数在内存中是按科学计数法来存储的,
其整数部分始终是一个隐含着的“1”,由于它是不变的,
故不能对精度造成影响。float:2^23 = 8388608,一共七位,
这意味着最多能有7位有效数字,但绝对能保证的为6位,
也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
注:float: 1符号位 23尾数 8指数,其中尾数表示有效数字
double同理
*/
return 0;
}