1.4 数据的表示
1.4.1 计数系统
多数计算机在物理层面都是以二进制的方式来运作的。例如,存储单元(memory cell)的状态只有两种,要么已充电,要么未充电;磁盘中的某个位置的状态也只有两种,要么已磁化,要么未磁化;CPU 中的晶体管同样如此,要么允许电流通过,要么禁止电流通过。由此可见,数据在底层可以用二进制来表示,这种表示方式只使用1与0两种数位。但是,该形式对于人类来说却比较麻烦,而且理解起来也很慢。因此,我们还会用其他一些计数系统(或者说数制)来简记二进制数。
学习指南:实际上,在执行机器语言所写的代码时,计算机只能采用二进制来运作。那么,为什么必须用二进制呢?
答案是:用二进制来表示数据并在双稳环境下运行程序,是比较可靠的。
具有下列物理特性的硬件元件,能够以二进制的方式运作:
元件有两种稳定的能量状态(energy state,能态),可以分别用 0 与 1 来表示,例如,全开/全关、完全充电/完全放电、带正电/带负电、已磁化/未磁化、反光/不反光。
两种状态可以为能量壁垒(energy barrier,能垒)所区隔(也就是说,不会同时处于两种状态)。
可以感知元件的状态。
可以在两种状态之间切换。
假如计算机以十进制或十六进制来计数,那么要保存数值就比较复杂了,因为硬件必须要能够表示 10 种或 16 种不同的状态才行。反之,如果用二进制来保存,那么只需要把相应的物理性质与两种状态对应起来就可以了,对于大多数计算机来说,这些物理性质指的就是元件的电气性质。
要想读懂并撰写底层程序代码,必须熟悉各种计数系统与计数格式。最常见的几种格式是:二进制、八进制、十进制、十六进制。每种进制都有一个底,它决定了每个位置上可以使用多少种符号来计数。表1-3详细列出了这四种常用的数制,其中,十进制与十六进制是汇编代码中最常见到的形式。
表1-3 常用的数制