数据表示基础:二进制小数
到目前为止,我们只关注了整数,我们需要了解计算机如何表示分数。
来自规范:计算原理简介 了解带小数部分的数字如何以
能够为每种表示形式进行转换,从
|
你应该在小学学过十进制小数是如何工作的
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转换为二进制小数
这看起来很简单,因为6.125 = 4 + 2 + 0.125,但这个更有趣的数字呢:6.4
但这看起来不对?!这个数字不正确,因为它只达到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(注意,我们将此视为正数,有些人可能已经了解了**二进制补码**,如果您以前从未听说过,请不要担心,我们很快就会讲到) 如果我想增加存储在定点二进制数中的数字范围,我应该怎么做? 答案 增加小数点前的位数 如果我想提高存储在定点二进制数中的数字精度,我应该怎么做? 答案 增加小数点后的位数 |