我一直在谷歌上寻找答案,但似乎找不到。但二进制以字节/八位字节表示,8 位。所以字符 a(我认为)是01100010,
,单词 hey 是
01101000
01100101
01111001
所以我的问题是,为什么是 8?这只是计算机可以使用的一个好数字吗?而且我注意到 32 位/62 位计算机都是 8 的倍数……那么这是否与第一台计算机的制造方式有关?
抱歉,如果这个问题不符合 Q/A 标准……它与代码无关,但我想不出还有其他地方可以问它。
我一直在谷歌上寻找答案,但似乎找不到。但二进制以字节/八位字节表示,8 位。所以字符 a(我认为)是01100010,
,单词 hey 是
01101000
01100101
01111001
所以我的问题是,为什么是 8?这只是计算机可以使用的一个好数字吗?而且我注意到 32 位/62 位计算机都是 8 的倍数……那么这是否与第一台计算机的制造方式有关?
抱歉,如果这个问题不符合 Q/A 标准……它与代码无关,但我想不出还有其他地方可以问它。
“在 1960 年代初期,AT&T 首次在长途干线上引入了数字电话。这些电话使用了 8 位 µ 律编码。这笔巨额投资有望降低 8 位数据的传输成本。使用 8 位代码数字电话也导致采用 8 位数据八位字节作为早期 Internet 的基本数据单元”
http://en.wikipedia.org/wiki/Byte
不知道那是多么真实。不过,这似乎只是 IEEE 采用的符号和风格。
答案确实是“历史原因”。
计算机内存必须在某种程度上是可寻址的。当您向 RAM 询问信息时,您需要指定所需的信息 - 它会返回给您。理论上,可以产生位寻址存储器:你要求一位,你得到一位。
但这不会很有效,因为将处理器连接到内存的接口需要能够传达足够的信息来指定它想要的地址。访问的粒度越小,在您提供足够准确的地址以供检索之前,您需要的电线越多(或者沿着相同数量的电线推动的次数越多)。此外,多次返回一个位的效率低于一次返回多个位(旁注:一般来说是正确的。这是串行与并行的争论,并且由于降低了系统复杂性和物理特性,串行接口通常可以运行得更快。但总的来说,一次更多位更有效)。
其次,系统中的内存总量部分受限于最小可寻址块的大小,因为除非您使用可变大小的内存地址,否则您只能使用有限数量的地址- 但每个地址代表一个您可以选择的位数。因此,具有逻辑字节可寻址存储器的系统可以容纳的 RAM 是具有逻辑位可寻址存储器的系统的八倍。
因此,我们使用逻辑上可寻址的内存在较低的精细级别(尽管物理上没有 RAM 芯片将只返回一个字节)。只有 2 的幂对此才真正有意义,并且从历史上看,访问级别一直是一个字节。它可以很容易地是一个半字节或一个两字节的字,事实上,旧系统确实有比八位更小的块。
现在,当然,现代处理器大多以高速缓存行大小的增量吃内存,但我们表达分组和划分现在虚拟地址空间的方法仍然存在, CPU 指令可以直接访问的最小内存量仍然是八位块。CPU指令(和/或进入处理器的路径)的机器代码必须以与连接到内存控制器的电线数量相同的方式增长,以便寄存器可寻址 - 这与使用相同的问题我之前谈到的系统内存可访问性。
我们使用 8 位字节的一个原因是因为我们周围世界的复杂性具有明确的结构。在人类的尺度上,观察到的物理世界具有有限数量的独特状态和模式。我们天生有限的信息分类能力、区分秩序和混乱的能力、我们大脑中有限的记忆——这些都是我们选择 [2^8...2^64] 状态足以满足我们日常基本需求的原因计算需求。