【问题标题】:How decimal data type or fixed point number is stored in computer hardware?十进制数据类型或定点数如何存储在计算机硬件中?
【发布时间】:2018-05-31 13:56:09
【问题描述】:

float的情况下,IEEE-754 32位单精度格式用于在计算机硬件中存储数字。

这里最高有效位即第 31 位用于表示符号。它是 0 或 1

  • 0 表示正数。
  • 1 表示负数。

接下来的 8 位,即从第 30 位到第 23 位用于表示指数。它的偏差为 127。

接下来的 23 位,即从第 22 位到第 0 位用于表示尾数。

例如,我们有数字 (35.6)10

  • 对应的二进制数为(100011.1001 1001 1001 ...)2
  • 通过标准化我们得到的数字 (1.00011.1001 1001 1001 ... x 25)2
  • 我们去掉前导1,把小数点右边的部分放在尾数位中。
  • 所以,我们在尾数处输入 00011 1001 1001 1001...
  • 将指数 5 添加到偏差 127 我们得到 132
  • (132)10的二进制是(10000100)2
  • 我们将 10000100 放在指数位置
  • 由于 (35.6)10 是正数,我们将 0 放在符号位的位置

因此 (35.6)10 的硬件级表示为


双数使用 IEEE-754 64 位双精度格式表示。

这里是最高有效位,即第 63 位用于表示符号。它是 0 或 1。

接下来的 11 位,即从第 62 位到第 52 位用于表示指数。它的偏差为 1023。

接下来的 52 位,即从第 51 位到第 0 位用于表示尾数。


类似地,十进制数据类型或定点数如何存储在计算机硬件中?

【问题讨论】:

    标签: decimal hardware ieee-754 fixed-point


    【解决方案1】:

    定点数的存储方式与整数一样。硬件不维护有关二进制点位置的任何信息,就像硬件现在不维护存储的值是有符号还是无符号一样。由程序员或编译器负责跟踪变量的定点格式并对它们执行正确的操作。

    我不清楚“十进制数据类型”是什么意思。如果您指的是 BCD,则数据再次以整数形式存储,程序员/编译器有责任对其进行适当的操作。

    【讨论】:

      【解决方案2】:

      Fixed-point numbers 只是positional notation 中的一系列位,它们对最终值的贡献是预先确定的,即小数点的位置在一个确切的位置是已知的。整数只是定点数的子集,小数点放在最后一位的右侧(位置 0)

      这意味着定点数以整数形式存储。然而,在每次操作之后,需要进行一次移位(可能还有其他一些舍入)以将小数点移动到原始位置而不是位置 0。一些架构对此具有硬件支持,但大多数架构不支持,程序员负责这样做


      OTOH 十进制数据类型无论如何都与定点数无关。它只是不同基数的数字(十进制而不是二进制)。根据点是固定的还是可移动的,我们将有定点或浮点十进制值。如果它是浮点数,则指数将像二进制浮点值一样单独存储

      十进制值的有效部分也是一个整数,有多种存储方式。最简单的方法是将每个数字存储在一个字节中。这在内存上是浪费的,并且在许多情况下操作起来可能很慢。另一种常见的编码是BCD,它将十进制数字存储在 nibble 中(因为 nibble 有 16 种不同的状态并且足以容纳 10 个值)。为了进一步打包数字,DPD 将 3 个十进制数字存储在 10 位 中(使用 1024 个不同状态中的 1000 个)。这用于IEEE-754's decimal floating-point formats

      【讨论】:

        猜你喜欢
        • 2012-01-14
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多