计算最大内存大小时,2^n 中的“2”从何而来?n=n位

Sam*_*Pan 7 memory cpu-architecture

所以我正在阅读地址总线和最大内存大小,所以我的问题是,当计算任何架构的最大内存大小时,2^n 中的 2 在哪里,其中 n 是地址总线位大小来自哪里?“位大小”甚至是什么意思?我很困惑。

Fra*_*mas 43

2 来自二进制数的性质,其中每个数字恰好有 2 种可能的状态。

在计算给定位数可以包含的值的数量时,计算结果始终为Options^Instances选项表示一个数字可能有的一组可能的选择,实例表示正在使用的数字的数量(长度、宽度和大小是常见的同义词)。

同样,要计算可以存储的值的范围,它是0 -> (Options^Instances) - 1

请注意,数字值始终是自然数,因此我们不担心负数或小数或任何更奇特的东西。这些概念建立在数字值之上以增强它们的含义,但潜在的值表示没有改变。3、-3、3.3都表示不同的含义,但都以相同的方式使用数字值3,规则相同。

因此,一个 2 位数字可以表示 4 个可能的值,范围从 0 到 2^2-1 (0-3)。IE。可能值的集合是{00, 01, 10, 11}

一位二进制包含 2 个选项,所以它是 Base-2。目前使用的最常见的数字系统每个数字 (0-9) 有 10 个选项,因此它们是 Base-10。其他常见的基数包括八进制(base-8) 和十六进制(base-16)。

这个概念甚至不限于数字,而是任何设计良好的值集。如果我想计算由所有小写拉丁字母组成的可能的 8 个字符密码的数量,它将是 26^8。如果我添加大写字母,它将是 52^8。如果我然后添加数字,它将是 62^8。然而,对于二进制数,因为它只能是 0 或 1,所以它总是 2^n。

位大小是指用于存储值(“实例”变量)的位数。举一个现实世界的例子,游戏《无人深空》使用 32 位数字来表示金钱,所以你永远不会得到超过 4,294,967,295 的金钱。那是因为它是您可以用 32 位表示的最大值。

  • 应该说这是数字“基数”,因为二进制是基数 2,十进制是基数 10,依此类推。这可能会为未来关于数值系统的研究和学习以及 2^n 和 10^n 的原因提供提示。 (11认同)
  • ...而且“位”这个词是“二进制数字”的缩写,它是 0 或 1 (4认同)

gro*_*taj 30

这是“像我 5 岁一样解释它”类型的答案的尝试。

一个位有两种状态:01。使用一个位,我可以存储两个值:

0
1
Run Code Online (Sandbox Code Playgroud)

通过添加一个位,我们可以存储四个值。让我们忽略它们是二进制数,只需记住它们是不同的值:

00
01
10
11
Run Code Online (Sandbox Code Playgroud)

添加另一个,我们有八个值:

000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)

他们为什么要翻倍?想象一下,你在左边添加了新的位。如果该位为 0,您将获得前一组四个值但前缀为 0。如果为 1,您将获得前一组四个值以 1 为前缀。总共 8 个:4 个先前值乘以添加位的 2 个可能状态。

 previous bits  |    previous bits
 ??             |    ??
000             |   100
001             |   101
010             |   110
011             |   111
?               |   ?
new '0' bit     |   new '1' bit
Run Code Online (Sandbox Code Playgroud)

这是一个图形版本,如果您不喜欢 ASCII 艺术:

原始的四个值(每个两个字节),每行一个,被复制。 然后在第一组四个中的每个值前附加 0,在第二组中的每个值前附加 1。

如果我们对前置的“位”(“trit”?)有三种可能的状态,比如说A,BC,我们会将可能值的数量增加三倍:

 previous bits  |    previous bits  |    previous bits
 ??             |    ??             |    ??
A00             |   B00             |   C00
A01             |   B01             |   C01
A10             |   B10             |   C10
A11             |   B11             |   C11
?               |   ?               |   ?
new 'A' bit     |   new 'B' bit     |   new 'C' bit
Run Code Online (Sandbox Code Playgroud)

与前一个相似的图像,但现在有原始四个值的三个副本。 前四个以状态“A”开头,接下来的四个以“B”开头,最后四个以“C”开头。

因此,向该值添加一个新位会将可能值的数量乘以该新位可以具有的状态数量。第一位有 2 个状态(01),因此 1 位数字有 2 个值。第二位有两种状态:

2 × 2 = 4
?   ?
?    number of 2nd bit's states
?
 number of 1st bit's states
Run Code Online (Sandbox Code Playgroud)

第三位也有两种状态:

4 × 2 = 8
?   ?
?    number of 3rd bit's states
?
 number of previous values
Run Code Online (Sandbox Code Playgroud)

与第四位相同:

8 × 2 = 16
?   ?
?    number of 4th bit's states
?
 number of previous values
Run Code Online (Sandbox Code Playgroud)

我们可以将这个公式中的 8 扩展到我们之前的计算中:

((2 × 2) × 2) × 2 = 16
  ?   ?    ?    ?
  ?   ?    ?     number of 4th bit's states
  ?   ?    ?
  ?   ?     number of 3rd bit's states
  ?   ?
  ?    number of 2nd bit's states
  ?
   number 1st bit's states
Run Code Online (Sandbox Code Playgroud)

如您所见,要获得可能值的数量,您必须乘以特定位的状态数量。由于我们所有的位都有 2 个状态,我们可以将乘以 2 的n时间简化为简单的 2 n

  • 有趣的事实:三元计算机 [实际存在](https://en.wikipedia.org/wiki/Ternary_computer#History) 和 Donald Knuth 曾经说过他认为他们会卷土重来。 (8认同)
  • 另一个稍微相关的有趣事实:您可以表达复数 [仅使用四进制虚数基数 -2i 中的数字 0,1,2,3](https://en.wikipedia.org/wiki/Quater-imaginary_base ) (2认同)

Hei*_*nzi 6

让我用一个类比来补充现有的答案:你可以用一个-digit 数字构建多少个不同的数字(让我们称它们为addressn

咱们试试吧:

  • 2 位数字可以构建从 00 到 99 的地址,即 100 个地址。
  • 3 位数字可以构建从 000 到 999 的地址,即 1000 个地址。
  • ...
  • 通常,n数字可以构建10^n地址。

那是因为一个(十进制)数字有 10 种可能的状态(0-9,拉丁decem = 10)。

就像数字,除了它们只有 2 个状态(0 和 1)。因此,n位可以构建2^n地址。


Law*_*ceC 5

CPU 通过它们的地址和数据引脚与 RAM 通信。这是一个来自名为 6502 的旧 8 位 CPU 的示例。

在此处输入图片说明

A 引脚是地址引脚,D 引脚是数据引脚。

有 16 个 A 引脚,编号为 0 到 15。

每个引脚都可以打开关闭(介于两者之间),因此每个引脚有 2 种可能的状态。

所以有 2^16 个可能的状态,或 65,536 个可能的地址。

D 引脚用于从地址发送(写入)或获取(读取)数据。由于有 8 个,您可以读/写 2^8 个可能的值(0-255)。

现代 CPU更加复杂,因为它们通过多个通道与 RAM 通信,而现代 RAM 的信号由于其速度而更加复杂,但本质上是相同的概念。