web-dev-qa-db-ja.com

longデータ型とintデータ型の違い

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

sizeof(int)
sizeof(long)
46
Alex

this リファレンスから:

Intは元々、プロセッサの「自然な」Wordサイズにすることを目的としていました。最新のプロセッサの多くは、さまざまなWordサイズを簡単に処理できます。

また、このビット:

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

53
Paul Sonier

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

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

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

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

42
Dan Olson

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

それらは異なるタイプです-時には同じサイズで、時にはそうではありません。

(本当に昔のsizeof(int) == 2sizeof(long) == 4 —それはC++が存在する前の日かもしれませんが、考えてみてください。それでも技術的には正当な構成です。ただし、埋め込みスペースの外側では珍しく、埋め込みスペースでも珍しい可能性があります。

17

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

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

4
JaredPar

Longは、少なくともintと同じサイズである必要があり、場合によっては(必ずしもそうではないが)より長い必要があります。

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

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

3
abelenky

典型的なベストプラクティスは、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;
2
fwlx