C/C++ 类型转换

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;
} 

程序的运行结果如下:

这里写图片描述

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

相关内容的扩展可见:
http://blog.csdn.net/hzw05103020/article/details/50626076


版权声明:本文为u010429424原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。