将数字转换为 IEEE 754

问题描述 投票:0回答:3

我了解如何将十进制数转换为 IEE 754。但我对如何回答这个问题感到困惑 - 它只给我一个商?我不被允许使用计算器,所以我不确定如何计算。我应该先将它们都转换为二进制并除以它们吗?

math floating-point binary ieee-754 calculation
3个回答
1
投票

10/32 = 5/16 = 5•2−4 = 1.25•2−2 = 1.012•2−2

符号为+,指数为-2,有效数为1.012

正号编码为 0。

指数 −2 编码为 −2 + 127 = 125 = 011111012

有效数 1.012 是 1.010000000000000000000002,它使用最后 23 位进行编码,010000000000000000000002

将它们放在一起,IEEE-754 编码为 0 01111101 01000000000000000000000。要转换为十六进制,首先将其组织为四位组:0011 1110 1010 0000 0000 0000 0000 0000。然后可以轻松读取十六进制: 3EA0000016


0
投票

我是这样看的:

10/32 =        // input
10/2^5 =       // convert division by power of 2 to bitshift
1010b >> 5 =
.01010b        // fractional result
--^-------------------------------------------------------------
  |
first nonzero bit is the exponent position and start of mantissa
----------------------------------------------------------------
man = (1)010b           // first one is implicit
exp = -2 + 127 = 125    // position from decimal point + bias
sign = 0                // non negative
----------------------------------------------------------------
0 01111101 01000000000000000000000 b
^    ^                ^
|    |            mantissa + zero padding
|   exp
sign
----------------------------------------------------------------
0011 1110 1010 0000 0000 0000 0000 0000 b
   3    E    A    0    0    0    0    0 h
----------------------------------------------------------------
3EA00000h

是的,Eric Postpischil 的答案是相同的方法(顺便说一句+1),但我不喜欢这种格式,因为乍一看并不清楚在没有正确阅读文本的情况下该怎么做。


0
投票

在没有计算器的情况下进行 10/322 的转换作为练习纯粹是虐待狂。

有一个无需工具即可完成的通用方法,但可能很乏味。

N is the number to code. We assume n<1
exp=0
mantissa=0 
repeat 
  n *= 2
  exp ++
  if n>1
    n = n-1
    mantissa = mantissa <<1 | 1
  else
    mantissa = mantissa <<1
until mantissa is a 1 followed by 23 bits

然后您只需以 IEEE 格式编码尾数和 (23-exp)。

请注意,这种计算经常会导致循环。每当你找到相同的 n 时,你就知道该序列将会重复。

举个例子,假设我们必须编码 3/14

3/14  -> 6/14  e=1 m=0  
6/14  -> 12/14 e=2 m=00
12/14 -> 24/14-14/14=10/14 e=3 m=001
10->14 -> 20/14-14/14=6/14 e=4 m=0011
6/14   -> 12/14 e=5 m=00110

太棒了,我们发现了一个循环!
6/14->12/14->10/14->6/14。
所以尾数会按要求迭代110 110110110...

如果我们用 24 位填充尾数,则需要 26 次迭代,指数为 23-26=-3(获得它的另一种方法是在迭代 3 时 n 首次变为 >1,指数为 -3,如下所示1≤3/14*2^3<2).

我们可以用指数 = 127-3 = 124 和尾数 = 1.1011011011011 进行 IEEE754 编码....

© www.soinside.com 2019 - 2024. All rights reserved.