有人能帮我回答这个问题吗?
“将十进制数字10/32转换为32位IEEE 754浮点数,并以十六进制表示您的答案。(提醒: 32位的用法如下:1位:尾数符号,2-9: 8位指数超过127位,10位-32: 23位代表尾数。)
我知道如何将十进制数转换为IEE 754。但我对如何回答感到困惑--它只给了我一个商数?我不允许使用计算器,所以我不知道如何解决这个问题。我是否应该先将它们转换为二进制,然后再对它们进行除法?
发布于 2019-06-08 09:42:06
我是这样看的:
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的回答是相同的(+1位),但我不喜欢这种形式,因为从一开始就不清楚该怎么做才能不正确地阅读文本。
发布于 2019-06-08 01:19:23
把没有计算器的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然后,您只需编码尾数和(23-exp)的IEEE格式。
注意,这种计算经常会导致循环。每当你找到相同的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。
所以尾数将按要求迭代110110110次.
如果用24位填充尾数,则需要26次迭代,指数为23-26=-3 (另一种方法是在迭代3时n第一次变为>1,指数为-3为1≤3/14*2^3<2)。
我们可以进行指数=127-3=124和尾数=1.1011011011011的IEEE754编码。
https://stackoverflow.com/questions/56502559
复制相似问题