2.2.2 数据与指令

在计算机系统中,所有的信息都由二进制串表示,因此如果想从这些二进制串中获取有效信息,必须要结合上下文,或者说要根据已有的约定和环境信息,才能得到二进制串所要表达的内容。

例如,我们接收到一个32位二进制串“0100 1000 0100 1110 0101 0101 00100001”:

• 如果约定发送的是四个字符,并且采用的是ASCII编码,那么这个32位的二进制串就表示四个字符“HNU!”。

• 如果约定发送的是一个整数,并且最左边的是最高位,最右边的是最低位,那么这个32位二进制串表示的是整数128 443 896 369。

• 如果约定发送的是一个整数,并且最左边的是最低位,最右边的是最高位,那么这个32位二进制串表示的是整数261 785 077 266。

• 如果约定发送的是一个小数,前面16位是整数部分,最左边是最高位,最右边是最低位,后面16位也是一个整数,但表示这个数的小数部分,最左边是最高位,最右边是最低位,那么这个32位二进制串表示的是小数122 494.303 665。

从上面的例子可以看出,一个二进制串所代表的含义与运行环境及规定(统称为上下文)有关,而且这种规定不仅可以包括对数据的说明,也可以包括对数据的操作,即指令。例如,某台计算机每次读取外界输入的四个字节,即32位二进制串,并有如下规定。

• 如果第一个字节的第一位是0,就表示后面三个字节都是数据并且显示在屏幕上。

○ 如果第一个字节的第二位、第三位与第四位是000,那么后面三个字节代表三个ASCII字符。

○ 如果第一个字节的第二位、第三位与第四位是001,那么后面三个字节代表一个整数,并且最左边为最高位。

○ 如果第一个字节的第二位、第三位与第四位是010,那么后面三个字节代表一个整数,并且最右边为最高位。

○…

• 如果第一个字节的第一位是1,那么第一个字节的后面7位为操作指令。

○ 如果第一个字节的后面7位为0000000,那么计算机会停机。

○ 如果第一个字节的后面7位为0000001,那么计算机将把第二个字节和第三个字节的值看成两个整数并进行相加,结果显示在屏幕上。

○ 如果第一个字节的后面7位为0000010,那么计算机将把第二个字节和第三个字节的值看成两个整数并进行相减,结果显示在屏幕上。

○…

总的来说,在计算机中,数据与指令都是二进制串,在使用时,必须通过各种规定来进行区分。