4

我正在尝试将 IEEE 754 32 位单精度浮点值(标准 c 浮点变量)转换为MIL-STD-1750A格式的无符号长变量。我在帖子底部包含了 IEEE 754 和 MIL-STD-1750A 的规范。现在,我的代码在转换指数时遇到问题。我也看到了转换尾数的问题,但我还没有解决这些问题。我正在使用上面链接中表 3 中列出的示例来确认我的程序是否正确转换。其中一些例子对我来说没有意义。

  1. 这两个例子怎么会有相同的指数呢?

    .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0000) 
    -1 x 2^0 (1000 0000 0000 0000 0000 0000 0000 0000)
    

    .5 x 2^0 有一位小数,-1 没有小数位,所以 .5 x 2^0 的值应该是

    .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0010)
    

    对?(0010 代替 0001,因为 1750A 使用加 1 偏置)

  2. 最后一个例子怎么能使用全部 32 位,第一位为 1,表示负值呢?

    0.7500001x2^4 (1001 1111 1111 1111 1111 1111 0000 0100)
    
  3. 我可以看到指数为 127 的值应该是 7F(0111 1111),但是指数为负的 127 的值呢?会是 81(1000 0001)吗?如果是这样,是因为那是 127 的二进制补码 +1 吗?

谢谢

1750A规格

4

2 回答 2

1

1)这两个例子怎么能有相同的指数?

据我了解,符号和尾数有效地定义了 [-1.0,1.0) 范围内的 2 补码值。

当然,这会导致冗余表示(0.125*2 1 = 0.25*2 0等)。因此,通过禁止 [-0.5,0.5) 范围内的尾数值来选择规范的归一化表示。

因此,在您的两个示例中,-1.0 和 0.5 都属于“允许的”尾数范围,因此它们都具有相同的指数值。

2)最后一个例子如何使用所有32位并且第一位为1,表示负值?

这对我来说不合适;您是如何获得该代表权的?

3) 指数为负的 127 的值呢?会是 81(1000 0001)吗?

我相信是这样。

于 2013-01-28T13:49:29.390 回答
0
  1. 请记住,分数是“有符号分数”。带符号的值以 2 的补码格式存储。因此,将零视为一。
    因此,该数字可以写为 -0.111111111111111111111 (base 2) x 2^0 ,接近一(如果我的数学正确,则收敛到 1.0)

  2. 在最后一个例子中,原始文档中有一个负号(-0.7500001x2^4)

于 2013-08-28T21:32:01.613 回答