質問
C++ における語長、文字サイズ、整数サイズ、バイトの関係は何ですか?
解決
標準は、特定のタイプの最小のサイズ(短いが、少なくとも16ビットで、intは少なくとも16ビットなどである)を有することを必要とし、(sizeof(int)
> = sizeof(short)
タイプのいくつかのグループが指示されます> = sizeof(char)
)。
他のヒント
C++ では、char は実装の基本文字セット内の任意の文字を保持できる十分な大きさでなければなりません。
int
「実行環境のアーキテクチャによって提案される自然なサイズ」を持っています。これは、int が次のことを行うことを意味することに注意してください。 ない サイズは少なくとも 32 ビットである必要があります。実装の場所 int
16 ビットが一般的です (MS-DOS に埋め込まれていると考えてください)。
以下は、C++98 および C99 標準のさまざまな部分から抜粋したものです。
long int
少なくとも同じ大きさでなければなりませんint
int
少なくとも同じ大きさでなければなりませんshort
short
少なくとも同じ大きさでなければなりませんchar
それらはすべて同じサイズである可能性があることに注意してください。
また (2 の補数の実装を想定):
long int
少なくとも 32 ビットである必要がありますint
少なくとも 16 ビットである必要がありますshort
少なくとも 16 ビットである必要がありますchar
少なくとも 8 ビットである必要があります
標準では、この「言葉」プロセッサによって使用されるブツを知りません。しかし、それは実行環境のための自然な大きさを持つべきであるタイプ「INT」と言います。しかし、たとえ64ビット環境のために、int型は、通常は32ビットです。だから、標準的な用語では「言葉は」かなり多く(もちろん、一般的な英語の「言葉」を除く)は、一般的な意味を持っていません。
文字サイズは、文字のサイズです。あなたが何について話した文字に依存します。文字型は、char、unsigned char型とsigned char型です。また、任意の大きさ有することができる文字格納するために使用されたwchar_t(実装によって決定する - が、その根本的なタイプとして整数型のいずれかを使用しなければならない列挙等あまり。)、チャー/ signed char型またはunsigned charが1つのバイトを有するように有しています。これは、1バイト文字を持っているのものと同じように多くのビットを有することを意味します。実装はchar型の1つの目的は、16ビットを持っていると言うならば、バイトも16ビットです。
今のバイトが1つの文字が占有するサイズです。それは単位ではなく、いくつかの特定のタイプです。それはあなたがメモリにアクセスすることができますユニットであるだけという、はるかにそれについてありません。すなわち、あなたはビットフィールドへのポインタへのアクセスを持っていませんが、1つのバイトから始まる単位へのアクセス権を持っています。
「整数のサイズは、」今はかなり広いです。どういう意味ですか? BOOL、CHAR、短い、int型、長いとそのunsinged対応の全ては整数です。 C ++標準によって引き継が - 彼らの範囲は、i「は整数のサイズ」と呼ぶだろうし、それがC標準に記載されているものです。 < - > -127の範囲チャーで署名されたために短いため、127は、それをint型は同じであり、-2 ^ 15 + 1 < - > ^ 15-1 2と長い間それは-2 ^ 31 + 1 < - > 2 ^ 31-1。彼らの未署名のカウンターパートは0からそれぞれ2 ^ 8-1 ^ 16-1 2と2 ^ 32-1までの範囲。これらは、しかし、最小限のサイズです。それはそれは当然の未満2 ^ 15-1であるため、intは、任意のプラットフォーム上で最大の大きさ2 ^ 14を持っていない可能性があり、です。これは、ビットの最小値が必要とされるこれらの値のために続きます。長い間16と短いため、8文字/ INTのために、それは負の値が符号付きcharの代わりに、例えば-128
の-127
されていない理由で必要とされない負の数のために32 2の補数表現です。
標準C ++はword
またはbyte
と呼ばれるデータ型を持っていません。残りはよく範囲として定義されています。ベースはchar
ビットを有するCHAR_BITS
あります。 CHAR_BITSの最も一般的に使用される値が8である
はsizeof(CHAR)== 1(1バイト)(Cでは、C ++で - 指定されていない)
sizeof(int型)> =はsizeof(文字)
単語 - ではないC ++タイプ、usualyコンピュータアーキテクチャで、それは2つのバイトを意味する。
種類のあなたが関係で何を意味するかに依存します。数値型の大きさは、一般的に、マシンのワードサイズの倍数です。バイトは、バイトであるバイトはありません - 8ビット、それ以上、何も少ないです。文字が、私は(詳細については、ARMを確認してください)信じて、単一の符号なしバイトなどの標準で定義されています。
一般的なルールがあり、データ型の実際の大きさについての仮定をしないでください。標準は、「長い」整数型の間の関係は、「INT」と同じサイズ以上のいずれかであろう指定します。言語の個々の実装は、彼らのために便利なタイプのための特定のサイズを選択します。例えば、64ビットプロセッサのためのコンパイラは、32ビットプロセッサのためのコンパイラとは異なるサイズを選択します。
あなたは(特定のターゲットアーキテクチャ上)を使用しているコンパイラのための特定のサイズを調べるためにはsizeof()演算子を使用することができます。