让我来给你讲述Binville的故事,这是一个位于荒无人烟之地的小镇。Binville只有一条通往它的道路。每个来到或离开Binville的人都必须在这条道路上行驶。但当你接近这个镇子时,道路会分叉。你可以选择向左或向右。
实际上,除了通往住宅的道路外,每条道路都有一个岔口。那些通向住宅的道路只是在房子前结束而已。没有一条道路有名字;这要归功于Binville规划委员会创建的一个巧妙的寻址方案。以下是Binville的地图,显示了道路和房屋的位置:
------- [] 00
/
------
/ \
/ ------- [] 01
-----
\ ------- [] 10
\ /
------
\
------- [] 11
正如您所看到的,每座房子都有一个两位数的地址。单凭这个地址就足以a)唯一标识每个房子(没有重复)并且b)告诉你如何到达那里。很容易在城里走来走去。每个岔口都带有一个零或一的标签,规划委员会称其为Binville交叉追踪器,简称bit。当你接近第一个岔路口时,看一下地址的第一位。如果是零,向左转;如果是一,向右转。然后在到达第二个岔路口时查看第二个数字,向左或向右转。
假设你想拜访住在Binville的朋友。她说她住在10号房子里。当你到达Binville的第一个岔路口时,向右转(1)。然后在第二个岔路口处向左转(0),你到了!
Binville就是这样存在了几年,但是关于它的田园风光、伟大的公园系统和慷慨的医疗保健逐渐传开了。(毕竟,如果不用花钱在路标上,可以把钱用在更好的事情上。)但是问题出现了。只有两个比特,寻址方案仅限于四个房屋!
因此,规划委员会集思广益,想出了一个计划:他们将向每个地址添加一位比特,从而将房屋数量加倍。为了实施该计划,他们将在城镇边缘建立一个新的岔路口,并为每个人分配新地址。以下是新地图,显示通往城镇和Binville新部分的新岔路口:
------- [] 000
/
------
/ \
/ ------- [] 001
----- Old Binville
/ \ ------- [] 010
/ \ /
/ ------
/ \
/ ------- [] 011
--
\ ------- 100
\ /
\ ------
\ / \
\ / ------- [] 101
----- New Binville (some homes not built yet)
\ ------- 110
\ /
------
\
------- 111
你有没有注意到Binville的原始居民是如何在地址前面添加一个零呢?这个新加的位表示新建的交叉路口。当位数增加一位时,地址数量就翻倍了。居民总是知道他们镇子的最大规模:只需计算2的位数次方即可。例如三位二进制数可以表示8个地址。
几年过去了,Binville再次满员了。更多的人想搬进来,于是又增加了一位(以及必要的交叉路口),将该城市的规模加倍到16个地址。接着又增加了一位,又增加了一位,再增加了一位…… Binville的地址很快就扩展到了16位,可以容纳高达216 (16,384)个住宅,但这还不够。人们不断涌入!
因此,规划委员会决定一劳永逸地解决问题:他们将一口气跳到32位。拥有超过40亿个家庭地址(232),这肯定足够了!
事实上…约25年后,Binville不再是无处不在的小镇。它现在成为了一个主要的大都市。事实上,它正在变得像一个有亿万居民的整个国家。但公园依然很好,每个人都有很好的医疗保健,所以人口不断增长。
面对不断增长的人口,规划委员会再次集思广益,并提出了扩建城市的另一个计划。这一次,他们将使用64位。你知道现在Binville市限制区域内可以容纳多少住宅吗?没错:18,446,744,073,709,551,616个。这个数字是如此之大,我们可以在大约20亿个地球上都分配地址给每个人。
使用64位并不能解决所有寻址问题。新的64位地址需要写入的空间是旧的32位地址的两倍。更糟糕的是,一些居民还没有更新他们的地址为新的64位格式,因此他们被迫进入了一个专门为仍在使用32位地址的人预留的城市封闭区域。但这没关系:使用32位的人已经拥有足够的城市资源来满足他们的需求。他们暂时感觉没有必要改变。
64位足够吗?谁知道呢,但Binville的居民正在等待128位地址的宣布……