我正在尝试将 IEEE 754 32 位单精度浮点值(标准 c 浮点变量)转换为无符号长变量,格式为MIL-STD-1750A http://www.xgc.com/manuals/mil-std-1750a-1.7.pdf。我在帖子底部包含了 IEEE 754 和 MIL-STD-1750A 的规范。现在,我的代码在转换指数时遇到问题。我还看到转换尾数的问题,但我还没有修复这些问题。我使用上面链接中表 3 中列出的示例来确认我的程序是否正确转换。其中一些例子对我来说没有意义。
-
这两个例子怎么会有相同的指数呢?
.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偏置)
-
最后一个例子如何使用全部32位并且第一位为1,表示负值?
0.7500001x2^4 (1001 1111 1111 1111 1111 1111 0000 0100)
我可以看到指数为 127 的值应该是 7F (0111 1111),但是指数为负 127 的值又如何呢?会是 81 (1000 0001) 吗?如果是这样,是不是因为那是 127 的补码 +1?
谢谢
1)这两个例子怎么会有相同的指数?
据我了解,符号和尾数有效地定义了 [-1.0,1.0) 范围内的 2 补码值。
Of course, this leads to redundant representations (0.125*21 = 0.25*20, etc.) So a canonical normalized representation is chosen, by disallowing mantissa values in the range [-0.5,0.5).
因此,在您的两个示例中,-1.0 和 0.5 都属于“允许的”尾数范围,因此它们都共享相同的指数值。
2)最后一个例子如何使用全部32位且第一位为1,表示负值?
我觉得这不太对劲;您是如何获得该代表的?
3) 负 127 指数的值怎么样?会是 81 (1000 0001) 吗?
我相信是这样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)