我一直在阅读一篇关于密码学的文章,我心想“32 位计算机实际上如何对 512 位值甚至 64 位值执行操作?”
有人能指出我正确的方向吗?也许我不知道如何正确表达我想知道的内容,但谷歌搜索对弄清楚这一点并没有太大帮助。
谢谢!
我一直在阅读一篇关于密码学的文章,我心想“32 位计算机实际上如何对 512 位值甚至 64 位值执行操作?”
有人能指出我正确的方向吗?也许我不知道如何正确表达我想知道的内容,但谷歌搜索对弄清楚这一点并没有太大帮助。
谢谢!
这是GregS 评论的扩展。
假设我知道所有 100 个single-digit * single-digit
乘法(从0 * 0 = 0
到9 * 9 = 81
),并且有人要求我计算561 * 845
。我可以说,“对不起,我不能乘以这么大的数字”;或者,我可以记住我的童年教育并这样做:
561
845 *
----------
2805
2244
4488 +
==========
474045
这只要求我可以在任何给定步骤中做我已知范围内的乘法或加法(带进位)。
现在,假设上面的每个符号不是十进制数字,而是一个 32 位字;而不是我,我们有一个处理器,它可以将 32 位字乘以 64 位结果,并添加(带进位)32 位字。瞧,我们有一个系统可以进行任意大的二进制乘法。
一次 32 位。有标志来指示进位、溢出等,以允许通过重复操作进行多字算术。
32 位处理器可以将较大的数字拆分到多个寄存器上,尽管它比在单个 32 位寄存器上执行操作要慢。对于加法/减法,它只是从最低有效寄存器开始执行算术,然后将状态位传送到下一个有效寄存器。乘法/除法可能会变得更复杂,但主要的缺点是性能。
有关详细信息,请参阅http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic。
还有这个问题:编程语言如何处理大量算术
简而言之,就像米奇所说的那样,它只是一点一点地分解它。您的处理器可能需要一些时间来处理它,但这就是为什么我们现在拥有多核处理器来加速这个过程。这也是为什么大多数操作系统都有 32 位和 64 位版本以及最终 128 位的原因。如果您对此感兴趣,请参加一些关于汇编和机器语言的课程