关于float阶码部分用移码表示的问题

子虚 2012-08-17 09:36:55
按照IEEE754标准,float型符号位1位,指数(阶码)位8位,尾数位23位。指数位用移码表示。那么120.5的浮点数表示应该为:
0 10000110 11100010000000000000000。
但是在VC++6.0上120.5是:
0 10000101 11100010000000000000000。
120.5的二进制为:01111000.1。要往前左移6位,6的补码为00000110。移码是符号位取反的补码,6的移码应该为10000110,那为什么会是10000101呢?还有,书上说,引入移码是为了让浮点数的机器零为全0,这句话什么意思?求解释,谢谢。
...全文
527 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-08-22
  • 打赏
  • 举报
回复
移码不是符号位取反的补码。
子虚 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

32位的浮点数中,S:浮点数的符号位,1 位,0表示正数,1表示负数。M:尾数,23位,

用小数表示,小数点放在尾数域的最前面。E:阶码(8 位),阶符采用隐含方式,即采用移码方

式来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大

者其指数值也大。采用这种方式时,将浮点数的指数真值e 变成阶码E 时,应将指数 e 加上

一个固定的偏移值12……
[/Quote]
谢谢您这么晚还回答我的问题.但是我还是要斗胆再问您一个问题:移码是符号位取反的补码吗?
startservice 2012-08-18
  • 打赏
  • 举报
回复
32位的浮点数中,S:浮点数的符号位,1 位,0表示正数,1表示负数。M:尾数,23位,

用小数表示,小数点放在尾数域的最前面。E:阶码(8 位),阶符采用隐含方式,即采用移码方

式来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大

者其指数值也大。采用这种方式时,将浮点数的指数真值e 变成阶码E 时,应将指数 e 加上

一个固定的偏移值127(01111111),即 E=e+127.


  IEEE754 标准中,一个规格化的32位浮点数x的真值可表示为

         x=(-1)s×(1.M)×2E-127     e=E-127        

ForestDB 2012-08-17
  • 打赏
  • 举报
回复
V=(-1)^s*2^(E-127)*F
建议看看百度和Google的结果。
子虚 2012-08-17
  • 打赏
  • 举报
回复
没人回答,自己结贴了

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧