首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何转换为/从8位浮点表示形式?

如何转换为/从8位浮点表示形式?
EN

Stack Overflow用户
提问于 2016-05-08 23:10:55
回答 1查看 2K关注 0票数 1

我目前正在为一个假设的CPU创建一个模拟器。CPU有16个8位寄存器,既可以表示有符号的字节,也可以表示8位浮点数.

SByte和FByte都包含一个字节成员变量。

目前,我已经研究了如何使用以下方法获得浮动字节的实际值:

代码语言:javascript
复制
FByte = SEEEEMMM

value = (-1)^S + 1.M^(E-7)

S = Sign bit
M = Mantissa
E = Exponent

如何将给定的双值(例如-3.562)转换为浮点表示(如SEEEEMMM)。

提前感谢!

编辑:我目前知道如何在理论上做到这一点--用base-2科学表示法和二进制表示法编写它,但要做到这一点,在我的程序中需要使用字符串操作,而我宁愿不让字符串中介体参与其中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 00:13:11

double转换为浮动表示的基本计划应该是:

  1. 使用doublelong转换为doubleToLongBits。这给出了IEEE754对double的表示。
  2. 使用对double结果的位操作提取doubleToLongBits的各个部分。第63位是符号位。位62-52是有偏指数.位51-0是尾数。
  3. 尾数的上3位(原始浮点数的51-49位)将成为你产生的3位尾数。(这两种格式都有隐含的1。)但是,如果原始浮点数的第48位是1,则必须决定如何处理舍入。如果位51-49是0b111,并且您决定需要将代码集合起来,请非常小心地编写代码,因为现在尾数从[1].111转到[1]0.000,这意味着您需要将一个移到右边(以得到[1].000),这将影响结果的指数。(我使用[1]来表示尾数中隐含的1位。)
  4. 要得到新的指数,取原始有偏指数,减去1023,再加上7.1023是IEEE 754 double的偏差,而7似乎是浮点类型的偏差。结果将是新指数,但可能超出范围。另外,如果你把新的指数加起来,你可能还得再加1,就像上面提到的。
  5. 结果的符号位是原始double的符号位。(我假设您的意思是(-1)^S * 1.M^(E-7)*而不是+)。

有关point格式的更多信息,请参见double

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37105764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档