【问题标题】:A negative floating number to binary负浮点数转二进制
【发布时间】:2017-01-05 03:36:52
【问题描述】:

所以练习说:“考虑对 16 位实数进行二进制编码。填充数字 -0.625 的二进制编码的空点,知道“1110”代表指数,减去一个“-1”

                _ 1110_ _ _ _ _ _ _ _ _ _ _                              "

我找不到答案,我知道这不是一项艰巨的练习(至少看起来并不难)。

【问题讨论】:

    标签: binary floating-point negative-number


    【解决方案1】:

    让我们暂时忽略符号,将值 0.625 分解为 2 的(负)幂:

    0.625(dec) = 5 * 0.125 = 5 * 1/8 = 0.101(bin) * 2^0
    

    这应该被归一化(值左移直到小数点前有一个,并相应调整指数),所以它变成了

    0.625(dec) = 1.01(bin) * 2^-1 (or 1.25 * 0.5)
    

    带隐藏位

    假设您有一个隐藏位场景(这意味着,对于标准化值,最高位始终为 1,因此不会存储它),这将变为 .01 在右侧填充零位,因此您得到

    sign = 1                        -- 1 bit
    exponent = 1110                 -- 4 bits
    significand = 0100 0000 000     -- 11 bits
    

    所以位是:

    1 1110 01000000000
    

    分组不同:

    1111 0010 0000 0000(bin) or F200(hex)
    

    没有隐藏位(即存储最高位)

    如果没有隐藏位场景,就变成了

    1 1110 10100000000
    

    1111 0101 0000 0000(bin) = F500(hex)
    

    【讨论】:

      【解决方案2】:

      首先你要明白每个数字“z”可以用表示

      z = m * b^e

      m = 尾数,b = 偏差,e = 指数

      所以-0.625可以表示为:

      -0.625 * 10^ 0
      -6,25 * 10^-1
      -62,5 * 10^-2
      -0,0625 * 10^ 1

      通过 IEEE 转换,我们的目标是归一化浮点数,这意味着逗号前只有一个前面的数字 (-6,25 * 10^-1)

      在二进制中,逗号前的单个数字将始终为 1,因此不会存储此数字。

      您正在转换为 16 位浮点数,因此您有:

      1 位符号 5 位指数 10 位尾数 == 16 位

      由于指数可以是负数和正数(正如您在上面看到的,这仅取决于逗号移位),因此他们提出了所谓的偏差。对于 5 位,偏差值为 01 111 == 15(dez),其中 14 个蜜蜂 ^-1 和 16 个蜜蜂 ^1 ...

      好了,闲话少说,让我们以转换你的号码为例来展示转换的过程:

      1. 像往常一样将前十进制位置转换为二进制
      2. 如果结果大于 1,则将小数位乘以 2,如果结果小于 0,则减 1 并记 1。0 记 0。 继续这一步,直到结果为 == 0,或者您记下的数字与尾数一样多
      3. 将逗号仅移动到小数点前一位并计算移位。如果您向左移动,则将计数添加到偏差中,如果您必须向右移动,则从偏差中减去计数。这是你的指数
      4. 确定您的标志并将所有部分添加到一起

      -0.625
      1. 0 到二进制 == 0

      2.
      0.625 * 2 = 1.25 ==> -1
      0.25 * 2 = 0.5 ==> 0
      0.5 * 2 = 1 ==> -1
      中止

      3.因此中间结果是-0.101
      将逗号右移 1 次以获得归一化的浮点数:
      -1.01
      指数 = 偏差 + (-1) == 15 - 1 == 14(dez) == 01110(bin)

      4. 将各部分放在一起,sign = 1(负数),(记住我们不存储数字的前导 1)

      1 01110 01
      因为我们在尾数计算过程中中止了用 0 填充其余位:
      1 01110 01 000 000 00

      【讨论】:

        【解决方案3】:

        IEEE 754 标准将binary16 指定为具有以下格式:

        Sign bit: 1 bit
        Exponent width: 5 bits
        Significand precision: 11 bits (10 explicitly stored)
        

        等式 = exp(-1, signbit) x exp(2, exponent-15) x (1.significantbits)

        解决方法如下,

        -0.625 = -1 x 0.5 x 1.25
        significant bits = 25 = 11001
        exponent = 14 = 01110
        signbit = 1
        ans = (1)(01110)(0000011001)
        

        【讨论】:

        • 我不太确定 OP 的分配是否使用 IEEE 兼容的 16 位浮点数。看起来它的指数只有 4 位。所以原则适用,但实际位可能略有不同。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2021-07-30
        • 2014-11-24
        • 2021-09-10
        • 2018-10-17
        相关资源
        最近更新 更多