1.4 位和字节
十进制数中的单个位或符号称为数字(digit)。像1247这样的十进制数就是一个四位数。类似地,二进制数中的单个位或符号称为位(bit)。每个位都可以是0或1。像0b110这样的二进制数就是一个3位数。
单个位能传递的信息很少:要么关,要么开;要么0,要么1。我们需要用位序列来表示更复杂的东西。为了让这些位序列更易于管理,计算机把8位分成一组——称为字节。下面是一些位和字节的例子(因为都是二进制,所以省略了前缀0b):
1 这是一个位
0 这还是一个位
11001110 这是一个字节或8位
00111000 这也是一个字节
10100101 这还是一个字节
0011100010100101 这是两个字节或16位
注意
4位数(即半个字节)有时被称为半字节(写为nybble或nyble)。
一个字节能存储多少数据呢?考虑这个问题的另一个思路是:用8位可以得到多少个不同的0/1组合?在回答这个问题之前,我们用4位来说明,这样更容易看明白。
在表1-1中,我列出了4位数中所有可能的0/1组合,还给出了与该数字对应的十进制表示。
如表1-1所示,我们可以用4位数表示16个不同的0/1组合,范围从十进制的0到15。查看位的组合列表有助于说明这一点,但是我们还有几种方法可以解释这个问题,而不用枚举每种可能的组合。
表1-1 4位数的所有可能值
通过把所有位都设置为1,我们可以确定4位能表示的最大数字,即0b1111。这就是十进制的15。如果把表示的0也算上,那么得到的总数就是16。另一种简便的方法是取2的位数次幂,这里位数为4,那么总共有24=2×2×2×2=16个0/1组合。
研究4位数是一个好的开始,不过我们前面谈论的是字节,它有8位。按照上面的方法,我们可以列出全部的0/1组合,但是我们跳过这一步,直接采用简便方法,计算2的8次方,可以得到256,这就是一个字节所含的不同组合的数量。
现在,我们知道了一个4位数可以有16种0/1组合,一个字节可以有256种组合。这和计算机有什么关系呢?假设一个计算机游戏有12个关卡,那么这个游戏只需要4位就可以轻松地保存当前关卡号。如果游戏有99个关卡,那么4位就不够用了,4位最多只能表示16个关卡!但是,一个字节就能很好地处理99个关卡的需求。计算机工程师有时需要考虑用多少位或多少字节来保存数据。