32

我是编程新手,来自非 CS 背景(没有正式学位)。我主要使用 C# 编写 winforms。

我对 32 位和 64 位感到困惑……我的意思是,听说过 32 位操作系统、32 位处理器以及基于它的程序可以拥有最大内存。它如何影响程序的速度。还有更多的问题不断浮现在脑海。

我试图通过一些计算机组织和架构书籍。但是,要么我太笨,无法理解其中的内容,要么作者认为读者有一些 CS 背景。

有人可以用简单的英语向我解释这些事情,或者向我指出可以做到这一点的东西。

编辑:我读过类似 In 32-bit mode, they can access up to 4GB memory; 在 64 位模式下,他们可以访问更多……我想知道为什么要访问所有这些东西。

赏金:下面的答案真的很好......尤其是马丁的一个。但是,我正在看一个彻底的解释,但用简单的英语。

4

15 回答 15

42

这真的都归结为电线。

在数字电路中,只有 0 和 1(通常是低电压和高电压)可以从一个元件(CPU)传输到另一个元件(存储芯片)。如果我只有 1 根线,则每个时钟周期只能通过该线发送 1 或 0。这意味着我只能寻址 2 个字节(假设字节寻址,并且为了速度,整个地址仅在 1 个周期内传输!)。

如果我有 2 根线,我可以寻址 4 个字节。因为我可以通过两条线发送:(0, 0)、(0, 1)、(1, 0) 或 (1, 1)。所以基本上它是 2 的线数的幂。

所以如果我有 32 根线,我可以寻址 4 GB,如果我有 64 根线,我可以寻址更多。

工程师可以采取其他技巧来解决比电线允许的更大的地址空间。例如,将地址分成两部分,在第一个周期发送一半,在下一个周期发送另一半。但这意味着您的内存接口速度将减半。

将我的评论编辑到此处(未编辑);)如果有人也有任何有趣的内容要添加,则将其设为 wiki。

就像其他评论提到的那样,2^32(2 的 32 次方)= 4294967296,即 4 GB。而 2^64 是 18,446,744,073,709,551,616。为了进一步挖掘(你可能在 Hennessey & Patterson 中读到过),处理器包含寄存器,它用作“暂存空间”来存储其计算结果。CPU 只知道如何进行简单的算术运算,并且知道如何移动数据。自然,这些寄存器的大小与架构的“#-bits”的位宽相同,因此 32 位 CPU 的寄存器将是 32 位宽,而 64 位 CPU 的寄存器将是 64 位宽的。

当涉及到浮点(处理双精度)或其他 SIMD 指令(单指令、多数据命令)时,会有例外。CPU 在主存储器(RAM)中加载和保存数据。由于 CPU 还使用这些寄存器来计算内存地址(物理和虚拟),因此它可以寻址的内存量也与其寄存器的宽度相同。有一些 CPU 使用特殊的扩展寄存器来处理地址计算,但在工程师意识到他们需要它之后,我会称之为“事后考虑”。

目前,64 位对于寻址真实物理内存来说已经相当多。由于实用性,大多数 64 位 CPU 在将 CPU 连接到内存时会省略很多线。用掉宝贵的主板空间来运行总是有 0 的电线是没有意义的。更不用说为了在今天的 DIMM 密度下拥有最大数量的 RAM,需要 40 亿个 DIMM 插槽 :)

除了增加的内存量,64 位处理器为大于 2^32 的整数提供更快的计算。以前程序员(或编译器,也由程序员编写;)必须通过占用两个 32 位寄存器并处理任何溢出情况来模拟拥有一个 64 位寄存器。但在 64 位 CPU 上,它将由 CPU 本身处理。

缺点是 64 位 CPU(在所有条件相同的情况下)将比 32 位 CPU 消耗更多的功率,因为​​所需的电路数量(大约)是两倍。然而,实际上你永远不会得到相同的比较,因为更新的 CPU 将采用更新的硅工艺制造,具有更少的功率泄漏,允许你在相同的芯片尺寸中塞进更多的电路,等等。但是 64 位架构会消耗两倍多记忆。与使用固定指令长度的架构相比,曾经被认为是“丑陋”的 x86 的可变指令长度实际上是一个优势。

于 2009-08-16T09:36:16.020 回答
42

让我们尝试通过查看计算机来回答这个问题;希望这将为您提供一些启示:

要记住的事情

  • 尽管它们很神奇,但计算机非常非常愚蠢。

记忆

  • 人们有记忆(可以说是丈夫和政治家除外)。人们将信息存储在记忆中以备后用。
    • 通过一个问题(例如,“你的电话号码是多少?”),一个人能够检索信息以给出答案(例如,“867-5309”)
  • 所有现代计算机都有内存,并将信息存储在内存中以备后用。
    • 因为计算机很笨,它们只能被问一个非常具体的问题来检索信息:“你记忆 中X的值是多少?”
      • 在上面的问题中,X被称为地址,也可以称为指针

所以在这里我们有一个人和计算机之间的根本区别:要从记忆中回忆信息,计算机需要被赋予一个地址,而人却没有。(从某种意义上说,“你的电话号码”是一个地址,因为它提供的信息与“你的生日”不同,但这是另一个对话。)

数字

  • 人们使用十进制数系统。这意味着对于十进制数中的每个数字,该数字可以是 0、1、2、3、4、5、6、7、8 或 9 之一。每个数字有十个选项。
  • 所有现代计算机都使用二进制数系统。这意味着对于二进制数中的每个数字,该数字只能是 1 或 0。计算机每个数字有两个选项。
    • 在计算机术语中,单个二进制数字称为,是b inary dig it的缩写。

地址

  • 计算机中的每个地址都是二进制数。
  • 计算机中的每个地址都有它可以拥有的最大位数(或位)。这主要是因为计算机的硬件是不灵活的(也称为固定的)并且需要提前知道地址只会这么长。
  • “32 位”和“64 位”等术语是指计算机可以存储和检索信息的最长地址。在英语中,“32 位”在这个意义上的意思是“这台计算机期望关于其内存的指令的地址长度不超过 32 个二进制数字”。
    • 可以想象,计算机可以处理的位越多,它可以查找的地址就越长,因此它一次可以管理的内存就越多。

32 位与 64 位寻址

  • 对于不灵活(固定)的位数(例如 2 个十进制数字),您可以表示的可能数字称为范围(例如 00 到 99,或 100 个唯一数字)。添加一个额外的十进制数字会使范围乘以 10(例如 3 个十进制数字 -> 000 到 999,或 1000 个唯一数字)。
  • 这也适用于计算机,但是因为它们是二进制机器而不是十进制机器,所以添加一个额外的二进制数字(bit)只会将范围扩大2倍。

    寻址范围:
    • 1 位寻址可让您谈论 2 个唯一地址(0 和 1)。
    • 2 位寻址可让您谈论 4 个唯一地址(00、01、10 和 11)。
    • 3 位寻址可让您谈论 8 个唯一地址(000、001、010、011、100、101、110 和 111)。
    • 过了很长一段时间...... 32 位寻址让您谈论 4,294,967,296 个唯一地址。
    • 过了更长的时间...... 64 位寻址让您谈论 18,446,744,073,709,551,616 个唯一地址。那是很多记忆!

影响

这一切意味着 64 位计算机可以存储和检索32 位计算机更多的信息。对于大多数用户而言,这实际上并不意味着太多,因为诸如浏览网页、查看电子邮件和玩纸牌游戏之类的事情都可以在 32 位寻址的范围内轻松运行。64 位优势真正发挥作用的地方是您拥有大量计算机必须处理的数据的领域。数字信号处理、十亿像素摄影和高级 3D 游戏都是在 64 位环境中大幅提升其海量数据处理能力的领域。

于 2009-08-19T23:51:12.097 回答
32

许多现代处理器可以在两种模式下运行:32 位模式和 64 位模式。在 32 位模式下,它们最多可以访问 4GB 内存;在 64 位模式下,他们可以访问更多。较旧的处理器仅支持 32 位模式。

操作系统选择在其中一种模式下使用处理器:在安装时,选择是在 32 位模式下还是在 64 位模式下运行处理器。即使处理器可以继续在 64 位模式下运行,从 32 位切换到 64 位也需要重新安装系统。旧系统仅支持 32 位模式。

应用程序也可以以 32 位或 64 位模式编写(或编译为)。这里的兼容性比较棘手,因为处理器在 64 位模式下运行时,仍然可以支持 32 位应用程序作为仿真功能。因此,在 64 位操作系统上,您可以运行 32 位应用程序或 64 位应用程序。在 32 位操作系统上,您只能运行 32 位应用程序。

同样,选择大小主要取决于您要访问的主内存量。在许多系统上,32 位应用程序通常限制为 2GB,因为系统需要一些地址空间。

从性能(速度)的角度来看,没有显着差异。64 位应用程序可能会稍慢一些,因为它们使用 64 位指针,因此对于给定的操作,它们需要更多的内存访问。同时,它们也可能更快一些,因为它们可以将 64 位整数运算作为一条指令执行,而 32 位处理器需要用多条指令来模拟它们。但是,那些 64 位整数运算相当少见。

有人可能还想知道在 64 位处理器上运行 32 位应用程序的成本是多少:在 AMD64 和 Intel64 处理器上,这种仿真模式主要是在硬件中,因此运行 32 位应用程序并没有真正的性能损失本地人。这在 Itanium 上有很大的不同,它对 32 位 (x86) 应用程序的模拟效果非常差。

于 2009-08-16T08:52:12.943 回答
18

让我告诉你宾维尔的故事,一个偏僻的小镇。宾维尔有一条路通向它。每个人要么进出宾维尔,要么在这条路上开车。但是当你接近城镇时,有一个叉子。你可以向左走,也可以向右走。

事实上,每条道路都有一个岔路口,除了通往房屋本身的道路。那些路只是在房子里结束。没有一条路有名字;由于宾维尔计划委员会制定了一个巧妙的寻址方案,他们不需要名字。这是宾维尔的地图,显示了道路和房屋:

              ------- []  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 位地址的公布……

于 2009-08-22T03:42:28.253 回答
3

马丁的回答大多是正确和详细的。

我想我只想提一下,所有内存限制都是每个应用程序的虚拟内存限制,而不是计算机中实际物理内存的限制。事实上,即使在 32 位系统中,也可以在单个应用程序中使用超过 4Gb 的内存,只是需要更多的工作,因为一次无法使用指针访问所有内存。链接文本

还有一点没有提到的是,传统x86处理器和x86-64的区别不仅在于指针大小,还在于指令集。虽然指针更大并且消耗更多内存(8 个字节而不是 4 个),但它由更大的寄存器组(15 个通用寄存器而不是 8 个,iirc)补偿,因此对于执行计算工作的代码而言,性能实际上可能更好。

于 2009-08-16T09:09:51.840 回答
2

马丁的回答非常好。只是添加一些额外的点......因为你提到了.NET,你应该注意 CLI/JIT 在 x86 和 x64 之间有一些差异,具有不同的优化(例如尾调用),以及一些细微的不同高级行为之类的东西volatile。这都会对您的代码产生影响。

此外,并非所有代码都适用于 x64。任何使用DirectX 或某些 COM 功能的东西都可能会遇到困难。不是真正的性能特征,但重要的是要知道。

(我删除了“DirectX” - 我可能在那里说垃圾......但很简单:你需要检查你所依赖的任何东西在你的目标平台上是否稳定)

于 2009-08-16T08:58:11.807 回答
2

将通用计算机内存视为具有数十亿方格的大型宾果卡。为了解决板上的任何单个方格,有一个方案来标记每一行和每列 B-5、I-12、O-52..等。

如果卡片上有足够的方格,最终您将用完字母,因此您将需要开始重复使用更多字母并写入更大的数字,以继续能够唯一地解决每个方格。

不知不觉中,播音员会吐出令人讨厌的巨大数字和字母组合,让您知道在您的 100 亿方卡上标记哪个方格。BAZC500000, IAAA12000000, OAAAAAA523111221

计算机的位数指定了它对字母和数字的复杂性的限制,以解决任何特定的正方形。

32 位意味着如果卡大于 2^32 方格,则计算机没有足够的电线和晶体管来允许它唯一地物理寻址读取值或将新值写入指定内存位置所需的任何特定方格。

64 位计算机可以单独寻址一个巨大的 2^64 方格。但要做到这一点,每个方格需要更多的字母和数字,以确保每个方格都有自己唯一的地址。这就是 64 位计算机需要更多内存的原因。

其他常见的寻址限制示例是本地电话号码。它们通常是 7 位数字 111-2222 或重新格式化为数字 1,112,222 .. 当超过 9,999,999 人想要自己的电话号码时会发生什么?您添加区号和国家/地区代码,您的电话号码从 7 位变为 10 位到 11 位,占用更多空间。

如果您熟悉即将到来的 IPv4 短缺,那也是同样的问题。 IPv4 地址是 32 位的,这意味着只有 2^32(约 40 亿)个唯一的 IP 地址可能,而且今天活着的人比这多得多。

我提到的所有方案(计算机、电话号码、IPv4 地址)都有开销,其中某些部分是为组织目的而保留的,因此可用空间要少得多。

64 位世界的性能承诺是,64 位计算机一次可以发送 8 个字节(ABCDEFGH),而不是一次发送 4 个字节(ABCD),因此字母表在不同的内存区域之间传输最多两次与 32 位计算机一样快。一些应用程序在拥有更多可用内存时运行速度更快,这也有好处。

在现实世界中,英特尔等人的 64 位台式机处理器并不是真正的 64 位处理器,并且对于几种类型的操作仍然仅限于 32 位,因此在现实世界中,32 位和 64 位应用程序之间的性能是边缘的。64 位模式为您提供了更多的硬件寄存器,这确实可以提高性能,但在“假”64 位处理器上处理更多内存也会损害某些区域的性能,因此通常是洗牌。将来,当桌面处理器变为完全 64 位时,我们将看到更多的性能改进。

于 2009-08-18T23:54:27.737 回答
2

我认为我在以前的答案中没有看到太多“注册”这个词。数字计算机是一堆寄存器,具有算术逻辑和存储数据和程序的内存。

但首先......数字计算机使用数字的二进制表示,因为二进制数字(“位”)0和1很容易由开关的两种状态(开/关)表示。早期的计算机使用机电开关;现代计算机使用晶体管,因为它们更小更快。小,更快

在 CPU 内部,开关在有限长度的寄存器中组合在一起,并且通常对整个寄存器执行操作:例如,将这个寄存器添加到那个寄存器,等等。如您所料,32 位 CPU 具有 32 位长的寄存器。我在这里简化,但请耐心等待。

将计算机内存组织为一系列“位置”是有意义的,每个“位置”与 CPU 寄存器的位数相同:例如,从该内存位置加载该寄存器。实际上,如果我们将内存视为字节,那只是寄存器的一小部分,我们可能会从一系列内存位置(1、2、4、8)加载寄存器。

随着晶体管变得更小,可以在计算机芯片的有限空间中实现用于更复杂算术的附加逻辑。CPU 空间始终处于溢价状态。

但是随着芯片制造的改进,更多的晶体管可以可靠地制造在稍微大一点的芯片上。寄存器可以更长,它们之间的路径可以更宽。

当保存内存位置地址的寄存器更长时,它们寻址更大的内存并且可以在更大的块中操作数据。结合更复杂的算术逻辑,事情可以更快地完成。

这不就是我们所追求的吗?

于 2009-08-22T00:46:08.117 回答
1

解释为什么 32 位模式只能访问 4GB 的 RAM:

最大可访问内存空间 = 2 n字节,其中 n 是体系结构的字长。所以在 32 位架构中,最大可访问内存空间是 2 32 = 4294967296 = 4GB RAM。

64 位架构将能够访问 2 64 = 大量内存。

刚刚注意到 Tchens 对此的评论。无论如何,如果没有 CS 背景,是的,计算机组织和体系结构书籍充其量是难以理解的。

于 2009-08-18T22:48:10.897 回答
1
  • 处理器使用 base-2 来存储数字。选择基数 2 可能是因为它是所有基数中“最简单的”:例如,基数为 2 的乘法表只有 4 个单元格,而基数为“10”的乘法表有 100 个单元格。
  • 在 2003 年之前,普通的 PC 处理器只有“32 位能力”。
    • 这意味着处理器的本机数值运算是针对 32 位数字的。
    • 您仍然可以对较大的数字进行数值运算,但这些运算必须由处理器执行的程序执行,而不是像 32 位处理器那样支持的“原始操作”(机器语言中的命令)-整数(当时)
    • 选择 32 位是因为 CPU 工程师喜欢 2 的幂,而 16 位还不够
  • 为什么 16 位还不够?使用 16 位可以表示 0-65535 范围内的整数
    • 65535 =1111111111111111二进制 (= 2 0 +2 1 +2 2 ...+2 15 = 2 16 -1)
    • 65535 是不够的,因为例如,医院管理软件需要能够统计超过 65535 名患者
    • 通常人们在讨论它的整数应该有多大时会考虑计算机内存的大小。65535绝对不够。计算机的 RAM 比这多得多,如果计算“字节”或位都没有关系
  • 32位被认为足够了一段时间。2003 年,AMD 推出了第一款支持 64 位的“x86”处理器。英特尔很快跟进。
  • 其实16位早就被认为够用了。
  • 许多硬件和软件向后兼容是常见的做法。在这种情况下,这意味着支持 64 位的 CPU 也可以运行支持 32 位的 CPU 可以运行的所有软件。
    • 向后兼容作为一种业务策略而努力。如果它也能完成前一个处理器所能做的一切,更多的用户会想要升级到更好的处理器。
    • 在 CPU 中向后兼容意味着 CPU 支持的新操作被添加到以前的机器语言中。例如,以前的机器语言可能有一些规范,例如“所有以开头的操作码1111都保留以供将来使用”
    • 从理论上讲,这种 CPU 向后兼容性是不必要的,因为所有软件都可以重新编译为新的且不兼容的机器语言。然而,由于公司战略和政治或经济制度的原因,情况并非如此。在 Utopic “开源”世界中,机器语言的向后兼容性可能不会成为问题。
  • x86-64(常见的 64 位 CPU 机器语言)的向后兼容性以“兼容模式”的形式出现。这意味着任何希望使用新 cpu 功能的程序都需要通知 CPU(通过操作系统)它应该以“64 位模式”运行。然后它可以使用新的 CPU 64 位功能。
  • 因此,一个程序要使用 CPU 的 64 位能力:CPU、操作系统和程序都必须“支持 64 位”。
  • 64 位足以给世界上每个人几个唯一的数字。对于大多数当前的计算工作来说,它可能已经足够大了。未来的 CPU 可能不太可能进一步转向 128 位。但如果他们这样做,那对于我能想象的一切来说绝对足够了,因此不需要 256 位转换。

我希望这有帮助。

于 2009-08-19T22:27:45.027 回答
0

值得注意的是,某些应用程序(例如多媒体编码/解码和渲染)在编写为充分利用 64 位时会获得显着(2 倍)的性能提升。

查看UbuntuWindows Vista的 32 位与 64 位基准测试

于 2009-08-16T09:10:06.317 回答
0

对于非 CS 人员。64 位将更好地用于计算(各种)它会很好,它也会让你拥有更多的 RAM。

此外,如果您的 RAM 有限(例如在 VPS 或小型 RAM 专用服务器中) - 选择 32 位,那里的服务会消耗更少的 RAM。

于 2009-08-19T18:26:19.290 回答
0

这是一个非常简单的解释,因为上面的所有内容都非常详细。

32 位是指寄存器。寄存器是存储数据的地方,所有程序都是通过操作这些东西来运行的。汇编直接对它们进行操作(这也是人们经常对汇编编程感到兴奋的原因)。

32 位意味着基本的寄存器集可以保存 32 位的信息。毫不奇怪,64 位意味着 64 位信息。

为什么这可以使程序更快?因为您可以更快地完成更大的操作。顺便说一句,它只会使某些类型的程序更快。游戏通常可以充分利用每个处理器的优化,因为它们的数学运算量很大(因此使用寄存器)。

但有趣的是,正如 tchen 所提到的,它们还有许多其他“东西”可以让你执行更大的操作。SSE、SSE2 等将具有 64 位寄存器和 128 位寄存器,即使在“32 位”系统上也是如此。

基于(我想)Windows 的特定内存寻址系统,增加寻址内存的能力直接说明了基本寄存器大小的增加。

希望能有所帮助。其他海报比我准确得多,我只是想非常简单地解释一下(这有助于我知道的很少:)

于 2009-08-22T00:55:40.507 回答
0

我对这个问题有一个很好的答案,但它并不适合这个答案块中的所有内容......简单的答案是,为了让您的程序从内存中获取一个字节,它需要一个地址。在 32 位 CPU 中,每个字节的内存地址存储在一个 32 位(无符号)整数中,最大值为 4 GB。当您使用 64 位处理器时,内存地址是一个 64 位整数,它为您提供大约 1.84467441 × 10^19 个可能的内存地址。如果您是编程新手,这真的足够了。你真的应该更多地专注于学习如何编程,而不是处理器的内部工作原理,以及为什么你不能在 32 位 CPU 上访问超过 4 GB 的 RAM。

于 2009-08-22T02:31:14.133 回答
0

解释 32 位处理器的可寻址内存范围的简单答案是:

假设您只允许构造 3 位数字,因此您可以达到的最大数字是 999。数字范围是 (0 - 999)。您只有 1000 个号码可供使用。

但是如果你被允许有 6 位数字,那么你可以构造的最大数字是 999999。现在范围是 (0 - 999999)。所以现在你有 100 万个号码可供你使用。

同样,您可以在处理器中拥有更多位,更大的地址集(前面示例中的数字)您可以构建并最终用于存储数据等。

任何比这更简单的东西都会很有趣!

-广告。

于 2009-08-22T18:58:37.807 回答