我目前正在为假想的CPU创建一个模拟器。 CPU有16个8位寄存器,可以表示有符号字节或8位浮点数。
SByte和FByte都包含一个字节成员变量。
我目前已经研究了如何使用以下方法获取浮动字节的实际值:
FByte = SEEEEMMM
value = (-1)^S + 1.M^(E-7)
S = Sign bit
M = Mantissa
E = Exponent
我如何将给定的双精度值(例如-3.562)转换为浮点表示形式(如SEEEEMMM)。
提前致谢!
编辑:我目前知道如何在理论上做到这一点 - 用基础2科学记法和二进制表示法写它,但是在我的程序中这样做需要使用字符串操作,而我宁愿保留字符串中介出来的。答案 0 :(得分:4)
将double
转换为浮动表示的基本计划应为:
doubleToLongBits
将double
转换为long
。这给出了double
的IEEE 754表示。double
结果上的位操作提取doubleToLongBits
的部分。位63是符号位。位62-52是偏置指数。比特51-0是尾数。0b111
并且您决定需要要整理,仔细编写代码,因为现在尾数从[1].111
变为[1]0.000
,这意味着你需要向右移一(获得[1].000
),会影响最终的指数。 (我使用[1]
表示尾数中隐含的1位。)double
的偏差,7似乎是浮点类型的偏差。结果将是新的指数,但它可能超出范围。 [另外,如果你向上舍入,你可能不得不向新指数添加另一个1,如上所述。] double
的符号位。 (我假设您的公式为(-1)^S * 1.M^(E-7)
,而*
代替+
。)有关double
的格式的详细信息,请参阅https://en.wikipedia.org/wiki/IEEE_floating_point。