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

本文共 1126 字,大约阅读时间需要 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类型的二进制存储格式是同样的道理。

转载于:https://www.cnblogs.com/zhuyf87/archive/2013/01/18/2866800.html

你可能感兴趣的文章
下载Android kernel
查看>>
s2sh框架整合具体配置-xml方式
查看>>
python 类的继承
查看>>
如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)(转)...
查看>>
一款数据加密共享与签名方案
查看>>
Cisco VTP中继协议配置
查看>>
数学复习内容2018
查看>>
初遇 Asp.net MVC 数据库依赖缓存那些事儿
查看>>
SQL Server遗失管理权限账号密码怎么办?
查看>>
第11件事 产品战略规划十步法
查看>>
go的精选类库
查看>>
DotnetSpider (一) 架构的理解、应用、搭建
查看>>
jquery实现页面的搜索功能
查看>>
rabbitmq简单实例
查看>>
C#处理Exception的常用方法总结
查看>>
写文件的工具类,输出有格式的文件(txt、json/csv)
查看>>
自定义spring参数注解 - 打破@RequestBody单体限制
查看>>
Chapter 4 Invitations——16
查看>>
Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function)
查看>>
MongoDB基础入门
查看>>