私は暗号化に関する記事を読んでいて、「32 ビットのコンピューターは実際に 512 ビットの値、さらには 64 ビットの値に対してどのように操作を実行するのだろうか?」と考えました。
誰かが私を正しい方向に向けることができますか? 知りたいことを適切に表現する方法に困っているのかもしれませんが、Google 検索はこれを理解するのにあまり役に立ちませんでした。
ありがとう!
私は暗号化に関する記事を読んでいて、「32 ビットのコンピューターは実際に 512 ビットの値、さらには 64 ビットの値に対してどのように操作を実行するのだろうか?」と考えました。
誰かが私を正しい方向に向けることができますか? 知りたいことを適切に表現する方法に困っているのかもしれませんが、Google 検索はこれを理解するのにあまり役に立ちませんでした。
ありがとう!
これはGregS のコメントの拡張です。
100 のsingle-digit * single-digit
掛け算 ( から0 * 0 = 0
まで9 * 9 = 81
) をすべて知っているとします561 * 845
。「申し訳ありませんが、それほど大きな数を掛けることはできません」と言えます。または、子供の頃の教育を思い出して、これを行うこともできます。
561
845 *
----------
2805
2244
4488 +
==========
474045
これは、任意のステップで、既知の範囲内で乗算、または加算 (キャリー付き) を実行できることのみを必要とします。
ここで、10 進数の代わりに、上記の各記号が32 ビットの単語であるとします。そして、私の代わりに、32 ビットのワードを 64 ビットの結果に乗算し、32 ビットのワードを (キャリー付きで) 加算できるプロセッサがありました。ほら、任意に大きなバイナリ乗算を行うためのシステムがあります。
一度に 32 ビット。キャリー、オーバーフローなどを示すフラグがあり、繰り返し操作によるマルチワード演算を可能にします。
32 ビット プロセッサは、単一の 32 ビット レジスタで演算を実行するよりも低速ですが、より大きな数を複数のレジスタに分割できます。加算/減算の場合、最下位レジスタから開始して算術演算を実行し、ステータス ビットを次の上位レジスタに転送します。乗算/除算ではもう少し複雑になる可能性がありますが、主な欠点はパフォーマンスです。
詳細については、 http://en.wikipedia.org/wiki/Arbitrary-precision_arithmeticを参照してください。
また、この質問:プログラミング言語は巨大な数の算術演算をどのように処理しますか
一言で言えば、ミッチが言ったことのようなもので、少しずつ分解していきます。プロセッサが処理するのに時間がかかる場合がありますが、このプロセスを高速化するためにマルチコア プロセッサを使用するようになったのはそのためです。また、ほとんどの OS が 32 ビット版と 64 ビット版、そして最終的には 128 ビット版で提供される理由でもあります。これに興味がある場合は、アセンブリ言語と機械語のクラスを受講してください。