Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3978183
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类: C/C++

2007-01-09 17:18:47

浮点数的存储格式:

浮点数的存储格式是符号+阶码(定点整数)+尾数(定点小数)
SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM
即1位符号位(0为正,1为负),8位指数位,23位尾数位
浮点数存储前先转化成2的k次方形式,即:
f = A1*2^k + A2*2^(k-1) + ... + Ak +... +An*2^(-m) (Ai = {0, 1}, A1 = 1)
如5.5=2^2 + 2^0 + 2^(-1)
其中的k就是指数,加127后组成8位指数位
5.5的指数位就是2+127 = 129 = 10000001
A2A3.....An就是尾数位,不足23位后补0
所以5.5 = 01000000101000000000000000000000 = 40A00000
所以,对浮点数*2、/2只要对8位符号位+、- 即可,但不是左移、右移

-------------------------------------
2008-05-30日修改:(多谢
QQ 65747584,兄弟提醒!这篇文章是从: 转过来的,我只转了一部分,当时写东西的时候突然想浮点数的存储问题,就上网找了一下,当时在学校学习的东西现在忘了。

晚上回家看了一下《深入理解计算机系统》第二章中的
浮点数存储问题,下面就列一个小事例。


看来我是错了,当是转来自己也没好好,多谢提醒!

5 = 101 从而得到浮点数数为:01000000101000000000000000000000 = 40A00000
5.5 = 101.01
从而得到浮点数数为:01000000101010000000000000000000 = 40A80000

==============
Insert A Link for IEEE754:

阅读(3757) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-11-11 14:14:01

更正一下 上面说的右移 应该是左移 不小心写错啦

chinaunix网友2009-11-11 14:12:36

5.5转换成二进制应该是101.1吧 转换完的浮点数应该是0 10000001 01100000 000000000000000 如有不对 请指点 转换方法: 將 17.625 換算成 float 型態. 首先, 先將 17.625 換算成 2 進位: 10001.101 (0.625 = 0.5 + 0.125 , 0.5 即 1/2 , 0.125 即 1/8) 再來將 10001.101 向右 shift 直到小數點前只剩一位 成了 1.0001101 x 2 的 4 次方 (因為向右移了 4 位). 此時, 我們要的底數和指數就出來了: 底數部份,因為小 數點前必為 1, 所以 IEEE 規定只記錄小數點後的就好, 所以此 題的底數為 0001101 . 指數部份實際為 4, 但在格式中須加上 127 , 固為 131 , 即二進位的 10000011. 綜合上列各項, 17.625 的 float 儲存格式就是: 0 10000011 00011010000000000000000

chinaunix网友2008-05-30 15:10:01

我觉得《C中浮点数的存储格式 》一文中5.5的浮点数存储格式举例有问题 如果你说的转换方法是对的话 01000000101000000000000000000000=5 而不是5.5 请核实!!! 本人正学习中,有问题可交流,但作为公布的东西一定要严谨 如果我错了请及时告诉我, QQ 65747584