跳转到内容

数据表示基础:二进制小数

来自 Wikibooks,开放世界中的开放书籍

试卷 2 - ⇑ 数据表示基础 ⇑

← 二进制补码 二进制小数 舍入误差 →


二进制小数 - 使用定点表示法

[编辑 | 编辑源代码]

到目前为止,我们只关注了整数,我们需要了解计算机如何表示分数。

来自规范:计算原理简介

了解带小数部分的数字如何以

  • 二进制定点形式表示,使用给定位数
  • 二进制浮点形式表示,使用给定位数。

能够为每种表示形式进行转换,从

  • 给定位数的十进制转换为二进制
  • 给定位数的二进制转换为十进制。

你应该在小学学过十进制小数是如何工作的

10 1
1 2 . 7 5

如你所见,列标题已扩展到 。我们可以在二进制中做同样的事情,列标题为 ,依此类推。因此,在二进制点后有 4 位的 8 位二进制表示的数字 12.75 为 8 + 4 + 0.5 + 0.25

8 4 2 1
1 1 0 0 . 1 1 0 0

请注意,对于小数点后相同位数,**二进制小数提供的精度较低**。它只能取4个不同的值,而十进制数可以用两位数表示100个不同的值。您很快就会看到这可能会导致什么问题。

示例:使用**定点**表示法将十进制数转换为二进制小数

我们将使用下面的表格将数字6.125转换为二进制小数

8 4 2 1
0 1 1 0 . 0 0 1 0

这看起来很简单,因为6.125 = 4 + 2 + 0.125,但这个更有趣的数字呢:6.4

8 4 2 1
0 1 1 0 . 0 1 1 0

但这看起来不对?!这个数字不正确,因为它只达到4 + 2 + 0.25 + 0.125 = 6.375,我们需要更多位来表示二进制小数位。但是,计算机可能会限制您可以使用的位数,因此我们将使用最接近目标数字的数字。您可能会对此感到有点恼火,但不用担心,每次尝试用十进制小数表示时,您都会做出这种折衷,例如0.33333333。

所以您可能会问,如果计算机在处理分数方面如此困难,它如何进行复杂的数学运算。我们到目前为止看到的答案只使用了1个字节,计算机可以使用比这多得多的空间。它们还可以通过两种方式操作给定的位数

  • 增加位数以增加数字范围
  • 增加小数点后的位数以提高精度

在实践中,它们还会使用一些巧妙的技术,例如**浮点数**(见下文)。

练习:从十进制转换为二进制小数

现在自己尝试一些问题,看看您能做到什么程度。请记住,如果小数位没有足够的位数,请写下最接近目标数字的数字。在每种情况下,使用8位二进制数,小数点后有4位

7.5

答案

0111.1000

4.5625

答案

0100.1001

1.6

答案

0001.1010(这是我们能得到的最近值)

3.3333333

答案

0011.0101(这是我们能得到的最近值)

尝试将这些二进制小数转换为十进制

0111.0100

答案

7.25

1011.1001

答案

11.5625(注意,我们将此视为正数,有些人可能已经了解了**二进制补码**,如果您以前从未听说过,请不要担心,我们很快就会讲到)
要将其解释为二进制补码数,让我们将其取反:0100.0111 = 4 + 0.25 + 0.125 + 0.0625 = -4.4375

如果我想增加存储在定点二进制数中的数字范围,我应该怎么做?

答案

增加小数点前的位数

如果我想提高存储在定点二进制数中的数字精度,我应该怎么做?

答案

增加小数点后的位数

华夏公益教科书