让我告诉你宾维尔的故事,一个偏僻的小镇。宾维尔有一条路通向它。每个人要么进出宾维尔,要么在这条路上开车。但是当你接近城镇时,有一个叉子。你可以向左走,也可以向右走。
事实上,每条道路都有一个岔路口,除了通往房屋本身的道路。那些路只是在房子里结束。没有一条路有名字;由于宾维尔计划委员会制定了一个巧妙的寻址方案,他们不需要名字。这是宾维尔的地图,显示了道路和房屋:
------- [] 00
/
------
/ \
/ ------- [] 01
-----
\ ------- [] 10
\ /
------
\
------- [] 11
如您所见,每栋房屋都有一个两位数的地址。仅此地址就足以 a) 唯一标识每所房子(没有重复)和 b) 告诉您如何到达那里。你看,在城里四处走走很容易。每个叉子都标有一个零或一,规划委员会称之为宾维尔交叉口示踪剂,或简称为位。当您接近第一个分叉时,请查看地址的第一位。如果是零,向左走;如果是一个,向右走。然后在到达第二个叉子时查看第二个数字,根据需要向左或向右。
假设您想拜访住在宾维尔的朋友。她说她住在 10 号房子。当你到达宾维尔的第一个岔路口时,向右走 (1)。然后在第二个岔路口,向左走 (0)。你在那儿!
宾维尔以这样的方式存在了好几年,但关于它田园诗般的环境、伟大的公园系统和慷慨的医疗保健的消息开始流传开来。(毕竟,如果你不必在路牌上花钱,你可以把它用在更好的东西上。)但是有一个问题。只有两位,寻址方案仅限于四个房子!
于是计委齐心协力,想出了一个方案:每个地址都加一点,这样房子的数量就翻倍了。为了实施该计划,他们将在城镇边缘建立一个新的分叉,每个人都会获得新的地址。这是新地图,显示了通往城镇的新岔口和宾维尔的新部分:
------- [] 000
/
------
/ \
/ ------- [] 001
----- Old Binville
/ \ ------- [] 010
/ \ /
/ ------
/ \
/ ------- [] 011
--
\ ------- 100
\ /
\ ------
\ / \
\ / ------- [] 101
----- New Binville (some homes not built yet)
\ ------- 110
\ /
------
\
------- 111
您是否注意到宾维尔原始部分的每个人都只是在他们的地址前面添加了一个零?新位表示已构建的新交叉点。当位数增加一时,地址数增加一倍。市民们总是知道他们城镇的最大规模:他们所要做的就是计算 2 的位数的幂的值。用三个比特,他们可以有 2 3 = 8 个房子。
几年过去了,宾维尔再次满员。更多的人想搬进来,所以又增加了一点(连同必要的十字路口),将城镇的规模扩大了一倍,达到 16 间房屋。然后又一个位,另一个,另一个……宾维尔的地址很快就达到了十六位,最多可以容纳 2 16 (16,384) 个房屋,但这还不够。人们不断地来来往往!
于是计委决定一劳永逸地解决这个问题:一路跳到三十二位。拥有超过 40 亿个家庭 (2 32 ) 的足够地址,这当然就足够了!
那是……大约二十五年来,宾维尔不再是一个偏僻的小镇。它现在是一个主要的大都市。事实上,它正在变得像拥有数十亿居民的整个国家一样大。但是公园仍然很好,每个人都有很好的医疗保健,所以人口不断增长。
面对不断增长的人口,计委再次齐心协力,提出再次扩建城市。这次他们将使用 64 位。您知道现在宾维尔市区可以容纳多少房屋吗?没错:18,446,744,073,709,551,616。这个数字如此之大,我们可以在大约 20 亿个地球上居住,并为每个人提供自己的地址。
使用 64 位并不是解决所有寻址问题的灵丹妙药。这些地址占用的空间是旧 32 位地址的两倍。更糟糕的是,一些市民还没有更新他们的地址以使用新的 64 位格式,所以他们被迫进入城市的一个有围墙的区域,专门为那些仍在使用 32 位地址的人保留。但这没关系:使用 32 位的人们可以访问足够多的城市来满足他们的需求。他们还没有感觉到需要改变。
64位就够了吗?谁知道这个时候,但宾维尔的市民正在等待 128 位地址的公布……