次のステートメントが4
を返すことを考慮すると、C++のint
型とlong
型の違いは何ですか?
sizeof(int)
sizeof(long)
this リファレンスから:
Intは元々、プロセッサの「自然な」Wordサイズにすることを目的としていました。最新のプロセッサの多くは、さまざまなWordサイズを簡単に処理できます。
また、このビット:
多くの(ただしすべてではない)CおよびC++実装では、longはintより大きくなります。 WindowsやLinuxなどの今日の最も人気のあるデスクトッププラットフォームは、主に32ビットプロセッサで実行され、これらのプラットフォームのほとんどのコンパイラは、長さと同じサイズと表現を持つ32ビットintを使用します。
標準が提供する保証は、次のようになります。
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++の拡張機能として実装されていました。)
32ビットマシンまたは64ビットWindowsマシンを使用しています。 64ビットマシン(Windowsではなく、Unix派生O/Sを実行)では、sizeof(int) == 4
がsizeof(long) == 8
です。
それらは異なるタイプです-時には同じサイズで、時にはそうではありません。
(本当に昔のsizeof(int) == 2
とsizeof(long) == 4
—それはC++が存在する前の日かもしれませんが、考えてみてください。それでも技術的には正当な構成です。ただし、埋め込みスペースの外側では珍しく、埋め込みスペースでも珍しい可能性があります。
両方が同じサイズのプラットフォームでは、答えは何もありません。どちらも符号付き4バイト値を表します。
ただし、これが真実であることに依存することはできません。 longおよびintのサイズは、標準では明確に定義されていません。コンパイラーは、型に異なるサイズを与えることにより、この仮定を破ることができます。
Longは、少なくともintと同じサイズである必要があり、場合によっては(必ずしもそうではないが)より長い必要があります。
一般的な32ビットシステムでは、intとlongはどちらも4バイト/ 32ビットであり、これはC++仕様に従って有効です。
他のシステムでは、intとlong longの両方が異なるサイズになる場合があります。以前は、intが2バイト、longが4バイトのプラットフォームで作業していました。
典型的なベストプラクティスは、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;