【发布时间】:2013-11-04 22:49:02
【问题描述】:
我想我知道如何将十进制数转换为 IEEE 754 单精度浮点表示,但我想确定一下。
我想在 IEEE 754 单精度浮点表示中表示 3.398860921 x 10^18。我知道如何浮动代表。坏了。
第 31 位:符号(0 表示 +,1 表示 -) 第 30-23 位:代表指数 第 22-0 位:表示尾数(有效位)
所以符号显然是 0,因为它是一个正数。对于指数,我想出了这个(通过将 18 添加到 127 的偏差)并将指数表示为:1001 0001
对于尾数,即 3.398860921 部分,我不断地将小数点右侧的所有内容乘以 2,如果大于 1,则标记为 1,否则标记为 0。然后取新答案并再次相乘小数点右边的所有内容都加 2,直到我想出足够的位来填充尾数。
所以现在我有: 0 | 1001 0001 | 0110 0110 0001 1011 1011 111
所以当我将其转换为十六进制时,我得到 0x48B30DDF,但这与我在 3.398860921 x 10^18 中开始时的数字不同
应该是这样还是我在某个地方犯了错误?任何帮助将不胜感激。
【问题讨论】:
-
为什么要“加 18”?指数是二的幂,而不是十的幂。
-
如果您只需要对实际上是整数的数字执行此操作,那么首先获取十进制整数字符串表示,将其转换为二进制,然后将二进制数打包成浮点数可能会更容易。
-
1) 那么我应该添加什么而不是 18 到 127 呢? 2)那么您的意思是“3.398860921000000000”并将其转换为二进制吗?
-
1) 要添加的正确内容是二进制值需要移动的位数才能将其转换为 1.xxxx 形式。 2) 见 Pascal Cuoq 的回答。
标签: floating-point decimal single-precision