我教授汇编语言程序设计多年,发现大多数人不了解数字本身和它们的表示形式之间的根本区别。在大多数情况下,混淆两者也不会有问题。但是,许多算法操作的正确性和效率取决于数字的内部和外部表示形式。如果不了解数字的抽象概念与表示形式之间的区别,就很难理解、使用或设计这些算法。
数字是一个抽象概念,看不见也摸不着。这是我们用来表示数量的一种聪明的设计。比如,可以说某一本书有100页。这些书页是真实的,看得见也摸得着。甚至可以一页一页地数下去,验证这本书真的有一百页。但是,“一百”只不过是一种抽象,用来描述一本书的规模。
下面这串符号并不是一百,意识到这一点非常重要:
100
这串符号不过是墨水在纸上形成的一些直线或曲线(称为字形)。可以把这串符号看作一百的表示形式,但它并不是100这个实际的数值。它只是眼前这张纸上的三个符号。它甚至都不是100的唯一表示形式。下面整张表的内容都是数值100的不同表示形式:
数字的表示形式(通常)是一串符号。例如,数值一百最常见的表示形式“100”实际上是三个数字的序列:一个数字1,后面跟着两个数字0。尽管每一个数字符号都有特定含义,但是并不妨碍我们简单地用“64”这个更短的序列来表示一百。构成100这种表示形式的每个数字符号甚至都不是数值。这些数字符号是用来表示数值的工具,它们本身并不是数值。
现在,读者可能会想为什么我要关心一串符号(比如“100”)是一百的实际数值还是它的表示形式。因为,在计算机程序中会经常看到一些看似数值(看起来就是“100”)的符号串,不能把它们和实际的数值混为一谈。另一方面,计算机表示数值一百有很多种形式,你要知道它们表示的是相同的数值。