C/C++ 类型转换
——————————————
有关&a、(int&)a的问题
程序的运行结果如下:
注解:
(int&)a 相当于将浮点数a的地址的前sizeof(int)个字节当成int型的数据输出。
float a = 1.0f在内存中的表示是0x3f800000,当(int&)a强制转换时,会把内存值0x3f800000当作int型输出,所以结果为1065353216(0x3f800000的十进制表示)
那为什么float a = 1.0f在计算机中的表示是0x3f800000呢?
这是由于浮点数在计算机中的表示方式有三部分构成:
符号位:0代表正数,1代表负数
指数位:存储科学计数法中的指数部分,采用移位的方式(127 + 指数)
尾数位:存储尾数部分
即:符号位 + 指数位 + 尾数位。以1.0f而言,
符号位:0
指数位:01111111(127 + 0的二进制)
尾数:(00000000000000000000000)
连起来就是111111100000000000000000000000
就是十进制的1065353216