質問: 32ビットマシンが2 ^ 32までしか扱えない場合、マシンをクラッシュさせずに1000000000000(兆)を書くことができるのはなぜですか? 32ビットコンピュータは2までの符号付き整数しか格納できません31 - 1。 これが、ipv4アドレスがなくなり、64ビット時代に入った理由です。しかし、数231 - 1(2,147,483,647)は、1兆(1,000,000,000,000)数ほど大きくはありません。これは、マシンがクラッシュすることなく正常に表示できるようです。誰かがこれがなぜなのか説明できますか?
回答: 違いは、コンピュータにデータを保存する方法にあります。理論上の8ビットマシンでは、2つの^ 8つの値を単一のプロセッサレジスタまたはメモリアドレスに格納することしかできません。 (これは使用されるプロセッサ、メモリアーキテクチャなどに基づいて "machine"から "machine"に変わることを覚えておいてください。しかし今のところ、仮説的な「ステレオタイプ」のマシンに固執しましょう。)理論上の16ビットマシンでは、レジスタ/メモリ位置の最大値は2 ^ 16、32ビットマシンでは2 ^ 32などになります。長年にわたり、プログラマは、単一のプロセッサレジスタまたはメモリアドレスに格納できる数よりも大きい数を格納して処理するために、あらゆる種類のchicaneryを考案しました。多くの方法が存在するが、それらはすべて、それらの「固有の」レジスタ/メモリ位置幅よりも大きい値を格納するために複数のレジスタ/メモリアドレスを使用することを含む。これらの方法はすべて、マシンが本来の容量よりも大きい値を保存/処理できるという点で有益です。欠点は、ほとんどすべてのアプローチが複数のマシン命令/読み取りなどを必要とすることです。これらの番号を処理します。時折多数の場合、これは問題になりません。 多数の多数(特に大きいメモリアドレス)を扱う場合、オーバーヘッドが発生することで処理が遅くなります。したがって、レジスタ、メモリ位置、およびメモリアドレスハードウェアを「より広く」かつ「よりネイティブに」取り扱うために最小の操作数でそのような数を処理することができるように広くすることが一般的に望まれている。数値サイズは無限大であるため、プロセッサレジスタ/メモリサイズ/アドレス指定は、常に固有の数値サイズと、より大きな幅を実装するために必要なコストのバランスになります。