2.1.1 数字文本

下面从文本开始说明如何用位0/1表示除数字以外的数据。在计算机中,文本是指字母、数字和相关符号的集合,也被称为字符。文本一般用于表示词、句子、段落等。文本不包括格式(粗体、斜体)。为便于讨论,我们把字符集限制为英文字母和相关字符。在计算机程序设计中,术语“字符串”通常也被用于指代文本字符序列。

记住文本的定义,我们需要表示的究竟是什么?我们需要表示A到Z,区分字母大小写意味着A和a是不同的符号。我们还需要表示像逗号和句号这样的标点符号,以及空格。我们也需要表示数字0~9。这里的数字可能会令人困惑,其实它指的是表示数字0~9的符号或字符,这与存储数字0~9是不同的。

像刚才描述的那样,如果把所有需要表示的不同符号加在一起,大约有100个字符。如果要用唯一的位序列来表示每个字符,每个字符需要多少位呢?6个位能给出64种不同的组合,这不够。7个位能给出128种不同的组合,足够用来表示100个左右的字符。不过,由于计算机通常是以字节为单位处理的,因此只有取整并使用完整的8位(即一个字节)来表示每个字符才有意义。用一个字节可以表示256个不同的字符。

那么,怎么用8位来表示每个字符呢?如你所想,已经存在用二进制表示文本的标准方法,我们马上就会讲到。但在这之前,有一点很重要,那就是:我们可以造出任何想要表示每个字符的方案,只要运行在计算机上的软件知道我们的方案即可。也就是说,在表示特定类型的数据时,有些方案优于其他方案。软件设计人员更喜欢常用操作易于执行的方案。

假设你要创造自己的方案,这个方案用位组来表示字符。你可能决定用0b00000000来表示字符A,用0b00000001来表示字符B,以此类推。这种把数据转换成数字格式的过程称为编码;解释这个数字数据的过程称为解码。

练习2-1:创建自己的方案来表示文本

定义一种用8位数字来表示大写字母A到D的方案,然后用你的方案把单词DAD编码成24位数字。这里的正确答案不止一个,示例答案请参阅附录A。额外小练习:用十六进制表示编码的24位数字。