3

私はこの質問に対するさまざまな答えを見つけました、そして私は1つの決定的な答えがなければならないことを知っています。Cの4つの主要なデータ型の最小割り当てメモリサイズはどれくらいですか?int、、、、そして私が考えていることですdouble。またはタイプは何らかの方法でサイズを変更しますか?floatcharsignedunsigned

4

6 に答える 6

9

ANSI Cは、さまざまなプリミティブデータ型に対して次のサイズを定義しています。

  • char
    • 最小符号付き範囲:-128 .. 127
    • 最小符号なし範囲:0 .. 255
    • 大きくすることもできますが、サイズに関係なく、sizeof(char)== 1
    • sizeof(unsigned char)== 1
  • 短い
    • 最小符号付き範囲:-32768 .. 32767
    • 最小符号なし範囲:0 .. 65535
    • 大きくすることができます
  • 長さ
    • 最小符号付き範囲:-2147483648 .. 2147483647 ..
    • 最小符号なし範囲:0 .. 4294967295
    • 大きくすることができます
  • int
    • 少なくとも、ショートと同じ範囲を持っている必要があります
    • ロングと同じ範囲を持つことができます
    • 長い範囲よりも大きい範囲を持つことはできません
    • short <= int、およびint <= long、ただしshort <long

floatとdoubleにはさらに多くのルールがありますが、一般に、floatの範囲は<= doubleの範囲です(最新のマシンの場合--- floatは4バイト、doubleは8です)。

于 2013-02-12T02:23:52.513 に答える
2

標準ではバイトのみcharが保証されています。 残りのタイプには、実装で定義されたサイズがあります。1

于 2013-02-11T15:25:12.723 に答える
2

符号付きまたは符号なしのタイプは、何らかの方法でサイズを変更しますか?

いいえ。保持されるデータの範囲にのみ影響します。短いデータ型(2バイト)については、以下の例を参照してください。

  • 署名済み-32,768〜 + 32,767
  • 符号なし0〜65,535
于 2013-02-11T15:29:28.287 に答える
1

これは素晴らしい質問です。C996.2.5を参照してください。そして、ウィキペディアCのデータ型の記事は問題ありません。

  • charは、基本実行文字セットのメンバーを格納するのに十分な大きさです。これは(8ビットで定義される)バイトではありません。質問に書き込むように、これは最小アドレス可能/割り当て可能単位(MAU)であると考えるのが良い方法ですが、一部のシステムではバイトではありません。 。
  • intsは一種の興味深いものです。少なくとも2^15-1(16ビット)を保持することになっていると思いますが、現時点ではC99では見つかりません。標準の新しいバージョンでは、実際には32ビット以上として定義されていると思います。これは、非常に多くの人が32ビットであると想定しているためです。ただし、一般に、それらはMAU()の観点から定義された実装であると想定する必要がありますsizeof()。それだけでなく、仕様ではビットのパディング(エラー訂正など)が許可されています。したがって、8ビット文字システムでは、sizeof(int)が4の場合、仕様ではこれらのビットの一部を「パディング」として使用できるため、最大intは必ずしも2^31-1ではありません。したがって、確実に知る唯一の方法は、を使用することlimits.hです。
  • doubleは常にfloatよりも大きいですが、float/doubleも実装定義です。通常、これらは実装によってIEEE-754仕様(それぞれ最低32ビットと64ビットが必要)と互換性があると定義されていますが、C99では必要ありません。ただし、charサイズが32ビットの場合、sizeof(float)は1にすぎない可能性があります。

  • 符号付き/符号なしはサイズを変更しません。

これらの理由<stdint.h>から、C言語への最も重要な新しい追加の1つです。それ以前は、クロスプラットフォームのコードを書くことは非常に困難でした。

于 2013-02-11T17:23:35.537 に答える
0

あなたが使用することができますsizeof(variable)

私のローカルマシンでこれを実行する例として:

sizeof (char)   = 1
sizeof (double) = 8
sizeof (float)  = 4
sizeof (int)    = 4
sizeof (long)   = 4
sizeof (long long)  = 8
sizeof (short)  = 2
sizeof (void *) = 4

注:取得する値は、OS/コンパイラ/CPUアーキテクチャによって決定される場合があります。

于 2013-02-11T15:25:47.130 に答える
-1

小さなテストプログラムを書いて、自分の目で確かめてください。

int main(int argc, char* argv[])
{
    printf("%d\n", sizeof(char) );
    printf("%d\n", sizeof(int) );
    printf("%d\n", sizeof(unsigned char) );
    printf("%d\n", sizeof(unsigned int) );
    printf("%d\n", sizeof(double) );
    printf("%d\n", sizeof(float) );
    return 0;
}

「int、float、double」はプラットフォームに依存します(16、32、64)。記号はサイズに影響せず、解釈のみに影響します。

于 2013-02-11T15:29:00.327 に答える