4

ここに画像の説明を入力

long int16 ビット CPUのサイズに問題があります。そのアーキテクチャを見る:

ここに画像の説明を入力

レジスタの長さが 16 ビットを超えることはありません。では、long intなぜ 16 ビットを超えることができるのでしょうか。実際、どのプロセッサについても、データ型の最大サイズは汎用レジスタのサイズでなければなりません。私は正しいですか?

4

2 に答える 2

11

はい。実際、C および C++ 標準ではsizeof(long int) >= 4.*が必要です。

(この場合は想定CHAR_BIT == 8しています。)

これは、32 ビット マシンでの 64 ビット整数の扱いと同じです。実装方法は、下半分と上半分を表すために 2 つのレジスタを使用することです。

加算と減算は、次の 2 つの命令として実行されます。

x86 の場合:

  • 加算:addそして、 「キャリー付き加算」はadcどこにありますか?adc
  • 減算:「借用減算」はどこにありsubますかsbbsbb

例えば:

long long a = ...;
long long b = ...;

a += b;

次のようにコンパイルされます。

add eax,ebx
adc edx,ecx

eaxとは の下部edxと上部ですa。そしてebxecxは の下部と上部ですb

ダブルワード整数の乗算と除算はより複雑ですが、同じ種類の小学校の数学に従いますが、各「桁」はプロセッサワードです。

于 2012-11-15T18:35:36.130 に答える
2

いいえ。マシンに 32 ビット値を処理できるレジスタがない場合は、ソフトウェアでシミュレートする必要があります。これは、任意精度演算のライブラリで使用されているのと同じ手法を使用して行うことができます。

于 2012-11-15T18:35:14.930 に答える