C/C++ 类型转换

——————————————

有关&a、(int&)a的问题

#include <stdio.h>
#include <iostream>

using namespace std;

int main() {
float a = 1.0f;
cout<<(int)a<<endl; // 将a转换为整型
cout<< &a <<endl; // a的地址
cout<< (int&)a <<endl; // 见注解
return 0;
}

程序的运行结果如下:

C/C++ 类型转换_浮点数

注解:
(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