我目前正在为一个假设的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)。
提前感谢!
编辑:我目前知道如何在理论上做到这一点--用base-2科学表示法和二进制表示法编写它,但要做到这一点,在我的程序中需要使用字符串操作,而我宁愿不让字符串中介体参与其中。
发布于 2016-05-09 00:13:11
将double转换为浮动表示的基本计划应该是:
double将long转换为doubleToLongBits。这给出了IEEE754对double的表示。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),*而不是+)。有关point格式的更多信息,请参见double。
https://stackoverflow.com/questions/37105764
复制相似问题