对于
float
,IEEE-754 32 位单精度格式用于在计算机硬件中存储数字。
这里最高有效位即第31位用于表示符号。要么是 0,要么是 1
接下来的 8 位,即第 30 位到第 23 位,用于表示指数。它的偏差为 127。
接下来的 23 位,即从第 22 位到 0 位,用于表示尾数。
例如,我们有数字 (35.6)10。
因此 (35.6)10 的硬件级表示为
双数使用 IEEE-754 64 位双精度格式表示。
这里最高有效位即第63位用于表示符号。它要么是 0,要么是 1。
接下来的 11 位,即从第 62 位到第 52 位,用于表示指数。它的偏差为 1023。
接下来的 52 位,即从第 51 位到 0 位,用于表示尾数。
同样十进制数据类型或定点数在计算机硬件中是如何存储的?
定点数的存储方式与整数一样。硬件不维护有关二进制小数点位置的任何信息,就像硬件现在不维护存储的值是否有符号一样。由程序员或编译器来跟踪变量的定点格式并对它们执行正确的操作。
我不清楚“十进制数据类型”是什么意思。如果您指的是 BCD,那么数据再次存储为整数,并且程序员/编译器有责任对其进行适当的操作。
定点数只是位置表示法中的一系列位,它们对预定的最终值的贡献,即小数点的位置在确切的位置是已知的。整数只是定点数的子集,小数点放在最后一位(位置 0)的右侧
这意味着定点数就像整数一样存储。然而,在每次操作之后,需要进行移位(可能还需要进行一些其他舍入),以将小数点移动到原始位置而不是位置 0。某些架构(最常见的 DSP)对此有硬件支持,但大多数没有,并且程序员负责这样做
OTOH 十进制数无论如何都与定点数无关。它们只是不同基数的数字(十进制而不是二进制)。根据小数点是固定的还是可移动的,我们将得到定点或浮点十进制值。如果它是浮动的,那么指数将像二进制浮点值一样单独存储
对于浮点小数类型,小数值的有效数字部分也是整数,并且有多种存储方式。最简单的方法是将每个数字存储在byte中。这会浪费内存,并且在许多情况下操作可能会很慢。另一种常见的编码是 BCD,它在 nibble 中存储十进制数字(因为半字节有 16 种不同的状态,足以存储 10 个值)。为了进一步压缩数字,DPD非常巧妙地将 3 个十进制数字存储在 10 位中(使用 1024 个不同状态中的 1000 个)。此方法用于 IEEE-754 的十进制浮点格式