47

次のステートメントが を返すことを考えると、C++のとの型4の違いは何ですか?intlong

sizeof(int)
sizeof(long)
4

6 に答える 6

53

この参照から:

int はもともと、プロセッサの「自然な」ワード サイズになるように意図されていました。最新のプロセッサの多くは、さまざまなワード サイズを同じように簡単に処理できます。

また、このビット:

多くの (すべてではない) C および C++ の実装では、long は int よりも大きくなります。Windows や Linux など、今日最も人気のあるデスクトップ プラットフォームは、主に 32 ビット プロセッサで実行され、これらのプラットフォーム用のほとんどのコンパイラは、long と同じサイズと表現を持つ 32 ビット int を使用します。

于 2009-05-22T22:20:38.933 に答える
45

標準が提供する保証は次のようになります。

1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)

したがって、 と が等しいことは完全に有効でsizeof (int)あり、多くのプラットフォームがこのアプローチを採用しています。32 ビット、64 ビット、 128 ビットsizeof (long)のプラットフォームがいくつかありますが、4 であることが非常に一般的です。intlonglong longsizeof (long)

(これlong longは C99 以降の C で認識されますが、通常は C++11 より前の C++ では拡張機能として実装されていたことに注意してください。)

于 2009-05-22T22:59:04.423 に答える
17

32 ビット マシンまたは 64 ビット Windows マシンを使用している。私の 64 ビット マシン (Windows ではなく、Unix 派生の O/S を実行している) ではsizeof(int) == 4sizeof(long) == 8.

それらは異なるタイプです — 互いに同じサイズの場合もあれば、そうでない場合もあります。

(本当に古い時代、sizeof(int) == 2そしてsizeof(long) == 4— それは C++ が存在する前の時代だったかもしれませんが、考えてみてください。それでも、技術的には、それは正当な構成ですが、組み込み分野の外では珍しいものであり、おそらく世界でも珍しいものです。埋め込まれたスペース。)

于 2009-05-22T22:21:04.517 に答える
4

両方が同じサイズのプラットフォームでは、答えは何もありません。どちらも符号付きの 4 バイト値を表します。

ただし、これが真実であることに依存することはできません。long と int のサイズは、標準では明確に定義されていません。コンパイラが型に異なるサイズを与える可能性があるため、この仮定を破ることができます。

于 2009-05-22T22:18:44.053 に答える
3

long は少なくとも int と同じサイズである必要があり、場合によっては、必ずしもそうとは限りません。

一般的な 32 ビット システムでは、int と long の両方が 4 バイト/32 ビットであり、これは C++ 仕様に従って有効です。

他のシステムでは、int と long long のサイズが異なる場合があります。int が 2 バイト、long が 4 バイトのプラットフォームで作業していました。

于 2009-05-22T22:23:07.587 に答える
2

一般的なベスト プラクティスは、long/int/short を直接使用しないことです。代わりに、コンパイラと OS の仕様に従って、それらをヘッダー ファイルにラップして、必要なビット量を正確に保持できるようにします。次に、long/int/short の代わりに int8/int16/int32 を使用します。たとえば、32 ビット Linux では、次のようなヘッダーを定義できます。

typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;
于 2013-05-28T01:44:30.023 に答える