IEEE 二进制浮点数的表示
朋友在谈一个物流相关的项目,是以前项目的一个延续,涉及到后台的扩展,手机端的App,外加两个App的对接的蓝牙打印机。这个项目前后说了一个多月了吧,最近才草拟了协议。项目本来不复杂,但是客户却如此的拖延。我觉得客户做事好慢,而朋友觉得是自己的就是自己的,不是自己的急也没有用。不断的打电话询问客户,可能最后还被压价,反而更没办法做了。他其实比我还急,但是人家的心态好。的确凡事急不得。
浮点数
在 C 语言中,有两种存储浮点数的方式,分别是 float 和 double ,当然了还有long double。这几种浮点型所容纳的长度不同,当然它们存储的精度也就不同了。
对于整形而言,比如 int 、short 、char 之类的,在内存中的存储方式都是用 补码 进行表示。而浮点数在内存中并没有使用补码进行表示。浮点数在内存中存储的方式使用了 IEEE 的编码表示方式,即使用 符号、指数 和 尾数 的形式进行存储的。
IEEE浮点数表示
用 IEEE 编码表示浮点数,需要 3 部分进行表示,分别是 符号、指数 和 尾数。符号位占用 1 位,0 表示正数,1 表示负数。指数 和 尾数 根据 float 和 double 类型的不同而长度不同。
IEEE 二进制浮点数的表示:
位数 符号位 指数位 尾数位
32 1 8 23 单精度(float)
64 1 11 52 双精度(double)
编码转换
以单精度为例:把3.75用IEEE表示法表示
1、把 10 进制转换为2进制:3.75D=11.11B
2、 尾数正规化 1.111*2^1
3、 修正指数 1+127=128 1000 0000
4、 符号 0表示正,1表示负
5、 IEEE表示 0 1000 0000 1110 0000 0000 0000 0000 000
6、 转换为16进制: 0100 0000 0111 0000 0000 0000 0000 0000 40 70 00 00
用 C 程序进行验证
写一个简单的 C 程序来验证上面的转换,代码如下:
#include <stdio.h> int main()
{
float f = 3.75f; printf("%f \r\n", f); return ;
}
以上代码用 VS 2012 编译,调试运行查看内存,如下图所示。

图中的00 00 70 40是以小尾方式存储的,其值为40 70 00 00,与我们手动转换的值相同。
我的微信公众号:“码农UP2U”

IEEE 二进制浮点数的表示的更多相关文章
- IEEE二进制浮点数算术标准(IEEE 754)
整理自IEEE 754 IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0) ...
- IEEE二进制浮点数算术标准学习
看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储, 先简单的做个笔记,后面需要更深入的理解 ...
- IEEE 754二进制浮点数算术标准
可能很多人都遇到过浮点数精度丢失的问题,下面以JavaScript为例. 1 - 0.9 = 0.09999999999999998 纳尼,不应该是0.1么,怎么变成0.099999999999999 ...
- IEEE 754 浮点数在计算机中的表示方法
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denorma ...
- 深入理解计算机系统(2.7)---二进制浮点数,IEEE标准(重要)
2.6我们进行了二进制整数运算的最后一役,本次LZ将和各位一起进入浮点数的世界,这里没有无符号,没有补码,但是有各种各样的惊奇.倘若你真正的进入了浮点数的世界,一定会发现它原来是这么有意思,而不是像之 ...
- IEEE 754浮点数表示标准
二进制数的科学计数法 C++中使用的浮点数包括采用的是IEEE标准下的浮点数表示方法.我们知道在数学中可以将任何十进制的数写成以10为底的科学计数法的形式,如下 其中显而易见,因为如果a比10大或者比 ...
- IEEE 754 浮点数加减运算
电子科技大学 - 计算机组成原理 小数的十进制和二进制转换 移码 定义:[X]移 = X + 2n ( -2n ≤ X < 2n ) X为真值,n为整数的位数 数值位和X的补码相同,符号位与补码 ...
- IEEE 754 浮点数的四种舍入方式
四种舍入方向: 向最接近的可表示的值:当有两个最接近的可表示的值时首选"偶数"值:向负无穷大(向下):向正无穷大(向上)以及向0(截断). 说明:默认模式是最近舍入(Round t ...
- [学习笔记]Javascript采用二进制浮点数和四舍五入的错误
1.样例 var a = .3 - .2 //0.09999999999999998 var b = .2 - .1 //0.1 a == b //false 出现这样的原因在于 1.Javascri ...
随机推荐
- Jenkins登录后空白页
进入.jenkins所在的目录 编辑config.xml文件 重启jenkins
- centos7开启,关闭防火墙
1.查看防火墙状态 firewall-cmd --state 2.停止防火墙 systemctl stop firewalld.service 3.禁止防火墙开机启动 systemctl disabl ...
- java基础(26):Thread、线程创建、线程池
1. 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并 ...
- python中反转列表的三种方式
1.内建函数reversed() li =[1, 2, 3, 4, 5, 6] a = list(reversed(li)) print (a) 注意:reversed()函数返回的是一个迭代器,而不 ...
- PHP面试题2019年奇虎360面试题及答案解析
一.单选题(共29题,每题5分) 1.以下代码 a.php 输出的结果是? a.php 的代码如下: b.php的代码如下: A.foo in a B.什么也不输出 C.报错 D.foo in b 参 ...
- Java 线程与多线程
Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...
- 被 GANs 虐千百遍后,我总结出来的 10 条训练经验
一年前,我决定开始探索生成式对抗网络(GANs).自从我对深度学习产生兴趣以来,我就一直对它们很着迷,主要是因为深度学习能做到很多不可置信的事情.当我想到人工智能的时候,GAN是我脑海中最先出现的一个 ...
- RunLoop的知识小记
RunLoop字面上的意思是,运行循环: 其基本作用:保持程序的持续运行: 处理App中的各种事件(比如:触摸事件.定时器事件.Selector事件) 节省CPU资源,提高程序性能:该做事时做事,该休 ...
- 【XML】XPath表达式
XPath简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起 ...
- [20190515]热备份模式与rman冲突.txt
[20190515]热备份模式与rman冲突.txt --//别人的系统做dg时打开热备份模式,忘记关闭,做rman备份时报错.做一个记录.--//实际上也怪自己,实施时没有讲清楚.通过例子说明: 1 ...