小数数据类型或定点数如何存储在计算机硬件中?

问题描述 投票:0回答:2

对于

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

storing floating point number in computer hardware

这里最高有效位即第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 的硬件级表示为

35.6 as stored in computer hardware


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

storing double number in computer hardware

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

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

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


同样十进制数据类型或定点数在计算机硬件中是如何存储的?

decimal hardware ieee-754 fixed-point
2个回答
0
投票

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

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


0
投票

定点数只是位置表示法中的一系列位,它们对预定的最终值的贡献,即小数点的位置在确切的位置是已知的。整数只是定点数的子集,小数点放在最后一位(位置 0)的右侧

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


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

对于浮点小数类型,小数值的有效数字部分也是整数,并且有多种存储方式。最简单的方法是将每个数字存储在byte中。这会浪费内存,并且在许多情况下操作可能会很慢。另一种常见的编码是 BCD,它在 nibble 中存储十进制数字(因为半字节有 16 种不同的状态,足以存储 10 个值)。为了进一步压缩数字,DPD非常巧妙地将 3 个十进制数字存储在 10 位中(使用 1024 个不同状态中的 1000 个)。此方法用于 IEEE-754 的十进制浮点格式

© www.soinside.com 2019 - 2024. All rights reserved.