76

使用しているシステムによって、さまざまなデータ型のサイズが変わる可能性があることを知っています。

私はXP 32ビットを使用しており、C++で演算子を使用すると、12バイトで8バイトのsizeof()ようです.long doubledouble

ただし、ほとんどの主要な情報源は 8 バイトであると述べているlong doubleため、範囲はdouble.

どうして 12 バイトなのですか? long double12バイトだとすると、これも値の範囲が広がるのではないでしょうか?それとも、値が double の範囲を超え、したがって 8 バイトを超える場合にのみ、長い署名が使用されます (コンパイラの数値)。

4

3 に答える 3

73

ウィキペディアからの引用:

x86 アーキテクチャでは、ほとんどのコンパイラが、そのハードウェアでサポートされる 80 ビットの拡張精度型として long double を実装します (データ構造を維持するために 12 または 16 バイトとして格納される場合があります。

コンパイラは、現在ソフトウェアで実装されている 128 ビットの 4 倍精度形式に long double を使用することもできます。

つまり、はい、 aはa よりも広い範囲の値を格納できるlong double 可能性doubleがあります。しかし、それは完全にコンパイラ次第です。

于 2010-08-11T00:58:50.957 に答える
4

数値の標準バイトサイズは、すべてのプラットフォームで保証されている最小サイズです。一部のシステムでは大きくなる場合がありますが、小さくなることはありません。

于 2010-08-11T01:12:28.900 に答える