C++のshort
とint
整数型の違いを尋ねる質問はたくさんありますが、実際にはshort
よりもint
を選択するのはいつですか?
(詳細な説明については Ericの答え を参照)
注:
int
は「自然なサイズ」に設定されます-ハードウェアが最も効率的に処理する整数形式short
を使用する場合、short
整数はint
に変換されるため、short
整数short
を使用すると、int
よりも狭い場合にメモリを節約できます。これは、大きな配列を使用する場合に重要になる可能性があります。int
システムと比較して、プログラムは32ビットint
システムでより多くのメモリを使用します結論:
int
を使用します。その場合は、short
を使用します。次の場合は、short
よりもint
を選択します。
どちらか
int
またはshort
ではなく、ビット単位でサイズを正確に指定する型を選択する必要があります(プラットフォームに応じて異なる場合があります(32ビットのshort
を備えたプラットフォームで、 16ビットshort
のプラットフォーム)。適切な候補は、 stdint.h で定義されているタイプです。そして:
short
に格納できない値を取る必要がない数値があります(16ビットのshort
の場合、これは-32768
-32767
、または0
-65535
16ビットの場合unsigned short
)。short
よりもint
の方が少ないメモリを使用します。標準では、short
がint
より大きくないことのみが保証されているため、実装は、short
とint
で同じサイズを使用できます。注:
char
sは算術型としても使用できます。 「char
またはshort
の代わりにint
を使用する必要がある場合」への回答は、これと非常によく似ていますが、異なる番号(-128
-127
8ビットのchar
の場合、0
-255
は8ビットunsigned char
)
現実には、short
型を具体的に使用したくないでしょう。特定のサイズの整数が必要な場合は、タイプがあります <cstdint>
優先する必要があります。たとえば、int16_t
はすべてのシステムで16ビットになりますが、short
のサイズが、コードがコンパイルされるすべてのターゲットで同じであることを保証することはできません。
一般的に、short
よりもint
を好むことはありません。
int型はプロセッサのネイティブWordサイズです
通常、int
はプロセッサのWordサイズです。
たとえば、32ビットのワードサイズのプロセッサでは、int
は32ビットになります。プロセッサは、32ビットを使用すると最も効率的です。 short
が16ビットであると仮定すると、プロセッサはメモリから32ビットをフェッチします。ここでは効率がありません。プロセッサが32ビットWordの正しい位置に配置されるようにビットをシフトする必要があるため、実際には長くなります。
小さいデータ型の選択uint16_t
など、長さがビット固有の標準化されたデータ型があります。これらは、char, short,
およびint
のあいまいなタイプよりも優先されます。これらの幅固有のデータ型は通常、ハードウェアへのアクセス、またはスペースの圧縮(メッセージプロトコルなど)に使用されます。
より狭い範囲の選択short
データ型は、ビット幅ではなく範囲に基づいています。 32ビットシステムでは、short
とint
の両方が同じ32ビット長である場合があります。
short
を使用する理由の1つは、値が特定の範囲を決して超えないためです。プログラムが変更され、データ型がオーバーフローする可能性があるため、これは通常誤りです。
概要
現在、short
はもう使用していません。 16ビットのハードウェアデバイスにアクセスするときは、uint16_t
を使用します。ループインデックスを含む数量にunsigned int
を使用します。データストレージのサイズが重要な場合は、uint8_t
、uint16_t
、およびuint32_t
を使用します。 short
データ型は最小であるため、データストレージではあいまいです。 stdint
ヘッダーファイルの出現により、short
は不要になりました。
アーキテクチャによって特定の制約が課せられていない場合は、いつでもint
を使用できます。タイプshort
は、メモリが貴重なリソースである特定のシステムを対象としています。