博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简要记录浮点型数据的二进制存储格式
阅读量:7229 次
发布时间:2019-06-29

本文共 1058 字,大约阅读时间需要 3 分钟。

浮点数包括float和double两种类型,float占32位,double占64位。其二进制存储格式遵循IEEE754标准。以float为例:

符号位:正数为0,负数为1。以float型数据123.456为例,分析其二进制存储格式。首先将十进制数123.456转换为二进制数为:1111011. 01110100101111001 (其中0.456如何转换为二进制?不断乘以2…)。1111011. 01110100101111001 即1. 11101101110100101111001乘以2的6次方。首先这是一个正数,则符号位为0。阶码为6,不过要转换成移码,6的移码为10000101。尾数则为1. 11101101110100101111001的小数部分,即11101101110100101111001。所以123.456的二进制存储格式为:01000010111101101110100101111001

用一段代码来验证一下:

#include 
#include
using namespace std;void printBinary(const unsigned char val) { for(int i = 7; i >= 0; i--) if(val & (1 << i)) std::cout << "1"; else std::cout << "0";}int main() { float d = 123.456; unsigned char* cp = reinterpret_cast
(&d); for(int i = sizeof(float)-1; i >= 0 ; --i) printBinary(cp[i]); system("PAUSE");}

要注意的是,X86架构为小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中。所以上面的for(int i = sizeof(float)-1; i >= 0 ; --i)先打印高地址部分,即二进制的高字节数据。程序的执行结果:

01000010111101101110100101111001

对比一下刚才的分析结果是相同的。double类型和float类型的二进制存储格式是同样的道理。

转载地址:http://dqsfm.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
闲聊Ceph目前在中国的发展Ceph现状
查看>>
我的友情链接
查看>>
CACTI 95th模版导入 及95th模板下载
查看>>
请求头header里的contentType为application/json和capplition/x-www-form-urlencoded
查看>>
迁云的那些事
查看>>
jquery ui 和ext.js一些区别,欢迎给位指正批评
查看>>
clj-xmemcached: memcached client for clojure
查看>>
SecureCRT日志自动记录
查看>>
磁盘 io 测试
查看>>
客户不提供开发者账号打包上传应用的处理方法
查看>>
Netfilter与FreeBSD的网络包过滤
查看>>
闲谈IPv6-现状和过渡
查看>>
我的友情链接
查看>>
Xcode3.2.6+iOS4.2無法上傳iPhone
查看>>
XMPP开发环境的搭建
查看>>
Docker 数据卷,数据卷容器详细介绍
查看>>
使用rman备份到挂载的NFS目录,提示ORA-19504-27054报错
查看>>
通过 rsync 搭建 CentOS 本地 yum 源服务器
查看>>
hadoop hive 常见问题解决持续更新
查看>>