
从进制到浮点数:计算机如何存储数字
笔者在数年前其实就在计算机组成原理的课堂中学习了这部分内容,但是今日在重新拾起的时候发现自己没有能够真正充分理解这部分内容。故写下这样一篇文章。 我们先问一个问题:计算机中的数究竟是如何被表示的? 进制与位权:同一个数的不同写法 我们都熟悉十进制,因为人类习惯用十个数字计数。但计算机底层处理的是二进制位。于是,我们需要一种办法,让同一个数能够在不同的表示方式之间自由转换。 先看一个例子: 同一个整数的四种写法 十进制13基数 10 二进制1101基数 2 八进制15基数 8 十六进制D基数 16 这四个数完全相等。进制只是书写同一个数量的不同规则。 为什么十六进制会出现字母?因为单个数字符号需要表示 0~15,总共 16 种可能,于是用 A~F 表示 10~15。 那么转换的本质是什么?其实就是每一个位置代表的权重不同。 例如十进制的 123: $$ 123 = 1 \times 100 + 2 \times 10 + 3 \times 1 $$二进制也一样,只不过相邻位置的权重不再相差 10 倍,而是 2 倍。 以十进制 13 为例: $$ 13 = 8 + 4 + 1 $$二进制各位置的权重从右向左是 1、2、4、8、16……需要哪个权重,就在对应位置写 1;不需要则写 0。 自己构造一个二进制数 点击下面的 0 或 1,切换该位,观察数值怎样变化。 1280 640 320 160 81 41 20 11 上排:位置权重 下排:该位的值 ...