2.2.3 大小端

上面提到,如果接收到一个32位的二进制串“0100 1000 0100 1110 0101 0101 00100001”,并约定其是一个整数,那么定义最左边的位是最高位还是最右边的位是最高位将会导致值有很大的差别。

为了便于解释,我们用十进制数字来举例。假设有一个数字,其形式为4321。显然,如果左边是最高位(这是我们最熟悉的方式),那么该数字就是四千三百二十一,而如果右边是最高位,那么该数字就是一千二百三十四。

当我们在计算机中保存4321时,假设每个字节保存一个数字,那么需要分配4个字节(假设这4个字节的地址是0x101~0x104)来保存4321,这时可以两种方式来保存:第一种方式是低地址保存最高位,也就是0x101保存4、0x102保存3等,这种方式称为大端法,大多数IBM和Sun Microsystems的机器都采用这种方式;第二种方式是低地址保存最低位,也就是0x101保存1、0x102保存2等,这种方式称为小端法,大多数Intel兼容机都采用这种方式。

值得注意的是,在涉及数字时才有大端和小端的概念,因为要区分最高位在哪里,而如果是一个字符串“4321”,那么就有一个统一的规则:0x101保存字符串的第一个字符'4',0x102保存字符串的第二个字符'3'等。