浮点标准之间的转换

Set*_*eth 3 c++ floating-point ieee-754

我正在尝试将基于 IEEE 的浮点数转换为 MIL-STD 1750A 浮点数。

我已附上两者的规格: 替代文本

我了解如何按照维基百科上的示例分解 IEEE 格式的浮点 12.375

但是,我不确定我对 MIL-STD 的解释是否正确。

12.375 = (12)b10 + (0.375)b10 = (1100)b2 + (0.011)b2 = (1100.011)b2 (1100.011)b2 = 0.1100011 x 2^4 => 指数,E = 4。

4 标准化 2 的补码 = (100)b2 = 指数

因此,MIL-STD 1750A 32 位浮点数为:

S=0, F=11000110000000000000000, E=00000100
Run Code Online (Sandbox Code Playgroud)

我的上述解释正确吗?

对于-12.375,只是交换符号位吗?IE:

S=1, F=11000110000000000000000, E=00000100
Run Code Online (Sandbox Code Playgroud)

或者小数部分会发生什么奇怪的事情吗?

Tri*_*tan 5

我认为上图有点误导。在 IEEE 格式中,要从正值切换到负值,只需翻转第一位即可。剩下的三位可以被视为无符号数。在 MIL-STD 格式中,尾数是二进制补码数,因此虽然第一位确实指示符号,但其余 23 位不会保持不变。

我得到的是

S=1, F=00111010000000000000000, E=00000100
Run Code Online (Sandbox Code Playgroud)

  • 是的,要取二进制补码否定,请按位取非并加一:因此,当您取按位非时,您最终会在最右侧得到 16 个 1,然后当您加一时,它们都会结转。 (3认同)