C/C++ 类型转换

来源:互联网 发布:profili软件介绍 编辑:程序博客网 时间:2024/05/21 12:50

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

原创粉丝点击