首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数字转换为IEEE 754

将数字转换为IEEE 754
EN

Stack Overflow用户
提问于 2019-06-08 00:46:24
回答 2查看 930关注 0票数 1

有人能帮我回答这个问题吗?

“将十进制数字10/32转换为32位IEEE 754浮点数,并以十六进制表示您的答案。(提醒: 32位的用法如下:1位:尾数符号,2-9: 8位指数超过127位,10位-32: 23位代表尾数。)

我知道如何将十进制数转换为IEE 754。但我对如何回答感到困惑--它只给了我一个商数?我不允许使用计算器,所以我不知道如何解决这个问题。我是否应该先将它们转换为二进制,然后再对它们进行除法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-08 09:42:06

我是这样看的:

代码语言:javascript
复制
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位),但我不喜欢这种形式,因为从一开始就不清楚该怎么做才能不正确地阅读文本。

票数 0
EN

Stack Overflow用户

发布于 2019-06-08 01:19:23

把没有计算器的10/322的转换作为一种练习是纯粹的虐待。

在没有工具的情况下,有一种通用的方法是可行的,但它可能是乏味的。

代码语言:javascript
复制
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代码

代码语言:javascript
复制
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编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56502559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档