关于浮点数在内存当中的表示
来源:互联网 发布:频响软件 编辑:程序博客网 时间:2024/05/23 19:20
1.IEEE754标准
电气和电子工程师协会(IEEE)定义了几种存储浮点数的标准。最常用的就是单精度和双精度。
单精度数据格式采用总共32位(4字节)来存储一个浮点表示法的实数。符号占用1位,指数占用8位(采用余127码),尾数使用23位(无符号数)。
双精度数据格式采用总共64位(8字节)来存储一个浮点表示法的实数。符号占用1位,指数占用11位(采用余1023码),尾数使用52位(无符号数)。
2.单精度表示方法
下面以单精度为例讨论浮点数的表示方法:
符号位S:占用1位,0表示正,1表示负;
指数位E:指数为占用8位,采用余127码系统,可表示的值为0~255,其中,0和255(即8位全部为1)是两个特殊值,后面会详细讨论。姑且认为指数位可表示的值为1~254,对应的指数范围是-126~127.
尾数位M:尾数位占用23位,表示小数位,范围从0~2^23-1.
一个实数存储为浮点数格式的步骤是:
在S中存储符号(0或1)
将数字转换为二进制
规范化
找到E,M的值
连接S,E,M
例子:写出十进制-5.75的127余码表示。
符号位为1,S=1;
5.75=101.11=1.0111∗22 E=2+127=129,M=0111
因此,5.75的单精度表示方法为:
1 10000001 10110000000000000000000
类似的,对于-161.875有:
161.875=10100001.111=1.0100001111*2^7S=1;E=7+127=134=10000110;M=0100001111;//单精度表示为:1 10000110 0100001111;
3.几个特殊情况
指数E=0时,有效数最高位为0,而不再是1,只有当
0<E<28−1
时,有效数最高位为1。当指数位为0,且位数位为0时,表示+-0。指数
E=28−1 且尾数部分为0,则表示正无穷大或者负无穷大,视符号位而定。- 指数
E=28−1 且尾数部分不为0,则表示这不是一个数。
百度百科对这几条规则解释的很清楚,参见IEEE754
4.上溢和下溢
由上面的规则可以推导出32位浮点数的表示范围。
正最大值:
正最小值:
负最大值:
负最小值:
0 0
- 关于浮点数在内存当中的表示
- 浮点数在内存上的表示
- 浮点数在内存中的表示 实例
- 浮点数在内存中的表示方式
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中的存储表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 浮点数在内存中的表示
- 8.5 filecmp--文件和目录比较处理
- 字符数组和字符指针
- hdoj 1823 Luck and Love 【二维线段树】
- java代理模式
- HDU破百,ACM起航
- 关于浮点数在内存当中的表示
- Android SDK Manager 下载SDK失败的解决办法 (转载)
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
- ROS turtlebot mapping
- Java中抽象类与接口的区别 | Java基础
- 【坑】使用PrintWrite返回JSON的时候中文乱码的解决办法
- JavaScript异步编程的Promise模式
- HDU 1061 (51Nod 1004 )n^n的末位数字
- Android 文本输入框EditText属性和方法说明(转载)