这不是我第一次想到这个问题,但我今天在玩一个旧的 SNES 游戏时,我再次想到它,想从比我更了解它的人那里寻求答案。
以超级任天堂为例。这是一个 16 位系统。使用 16 位,您最多可以数 65536,即 2^16。那么机器如何应对我的分数大于 65536 的情况?
这不是我第一次想到这个问题,但我今天在玩一个旧的 SNES 游戏时,我再次想到它,想从比我更了解它的人那里寻求答案。
以超级任天堂为例。这是一个 16 位系统。使用 16 位,您最多可以数 65536,即 2^16。那么机器如何应对我的分数大于 65536 的情况?
实际上它有点复杂,但简单的解释是 16 位处理器可以在一次操作中对 16 位数字进行操作,并且要处理更大的数字,您需要将其分解。例如,要添加两个 32 位数字,您将在一次操作中添加最低有效字,然后添加最高有效字,然后添加任何进位位。
显然这要慢得多(3 条指令而不是 1 条指令),但如果需要,几乎可以完成任何操作。这就是具有较大字的处理器可以更快的原因。他们可以用一条指令而不是几条指令来完成更大的操作。从程序员的角度来看,编译器通常会处理这个问题,除非您正在编写汇编,否则您永远不会手动完成。
但实际上,许多处理器都有专门的硬件来执行数学运算,因此调用 32 位或 64 位处理器确实与内存寻址和寄存器大小有关。
位较少的处理器的真正限制是它不能寻址尽可能多的内存,32 位只能寻址 4GB。在数学运算方面,16 位和 32 位处理器都相当于 FTTM(有限带图灵机),因此具有相似的计算能力。例如 java 的 BigInteger 可以任意大