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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值