Binary 微型浮点格式

Binary 微型浮点格式,binary,format,Binary,Format,我目前正在研究如何将二进制微浮点转换为十进制。我已经在互联网上到处找过了,但到目前为止,似乎没有任何指南对我有帮助。到目前为止,我只知道它有1个符号位,一个5位的超15指数,10个尾数位(还有1个隐含位(我不确定隐含位是什么))并且它使用标准IEEE规则 所以我来这里问这个问题。转换是如何工作的,您是如何计算的?简短回答 更长的答案 在阅读之前,您可以通过阅读有关32位的内容获得一些见解 正如你在问题中所说的,浮点数由三部分组成——符号位、指数和尾数。让我们看看每一个的细节,因为它们适用于您描

我目前正在研究如何将二进制微浮点转换为十进制。我已经在互联网上到处找过了,但到目前为止,似乎没有任何指南对我有帮助。到目前为止,我只知道它有1个符号位,一个5位的超15指数,10个尾数位(还有1个隐含位(我不确定隐含位是什么))并且它使用标准IEEE规则

所以我来这里问这个问题。转换是如何工作的,您是如何计算的?

简短回答

更长的答案 在阅读之前,您可以通过阅读有关32位的内容获得一些见解

正如你在问题中所说的,浮点数由三部分组成——符号位、指数和尾数。让我们看看每一个的细节,因为它们适用于您描述的16位微浮点。对于以下内容,我假设您对(未签名)的存储方式有一些了解

[] [][][][][] [][][][][][][][][][]
sb  exponent        mantissa
符号位 这或多或少是不言自明的——它表示表示的是正数还是负数。IEEE规定
1
的符号位为负,而
0
的符号位为正

指数 指数给出了我们的数量级。您已经指定了5位多余15位。过量-15表示指数的偏移量。为什么会有补偿?通常,我们希望指数能够表示正数或负数。一种方法是减去(或抵消)某个常数。在这种情况下,我们减去15

示例:
00110
如果是无符号表示,则表示十进制数
6
。然而,在我们的offset-15表示法中,
00110
表示
6-15
,它等于
-9
(十进制)

尾数 尾数的工作方式与常规无符号数非常相似,只是“隐含”位需要一些解释。由于数量级部分已经由指数处理,因此我们也不需要在尾数中表示不同数量级。因此,我们假设尾数是一个二进制数,形式为
1.xxxxxxxxx
x
s为
1
s和
0
s

示例:
0000000001
表示
1.0000000001
(二进制),它等于
1/2^11
0.00048828125
(十进制)

把它们放在一起 一旦您了解了如何解码尾数和指数,这就有点像使用二进制而不是十进制:只需将尾数值乘以提升为指数值的2,然后让符号位确定符号

示例:
10100011000000

  • 尾数位:
    1100000000
    ;尾数值:
    1.11
    (bin)或
    1.75
    (dec)
  • 指数位:
    01000
    ;指数值:
    16-15
    1
    (12月)
  • 符号位:
    1
    或“负”
综上所述,我们有:

(-1)^sb * mantissa * 2^exponent == -1 * 1.75 * 2^1 = -3.5

这涵盖了浮点数的主要情况,但在IEEE规范中,浮点数可以表示其他数字(以及非数字的东西),即:,和。