2012-11-01 16 views
23

sizeof char、int、long double ...は、コンパイラによって異なる場合があります。しかし、私は、C++ 11またはC11標準に従った、符号付きおよび符号なし基本整数型のサイズが同じであるという保証はありますか?sizeof(type)== sizeof(unsigned type)という保証はありますか?

+0

どういうわけか、不平等が意味をなさないタイプがない限り、私はそう思います。その場合、私はそれを聞いてうれしく思います。 – chris

+1

sizeof charは常に1ですが、charは16ビットのような珍しいサイズを持つことができますが、sizeof charは1になり、32ビットタイプのsizeは2になります。 –

答えて

40

C++ 11標準整数型について述べている:標準的な符号付き整数型のそれぞれについて

(§3.9.1/ 3)、対応する(しかし異なる)標準の符号なし整数型が存在します:同じ量のストレージを占有し、同じアライメント要件(3.11)を持つ「unsigned char」、「unsigned short int」、「unsigned int」、「unsigned long int」、および「unsigned long long int」対応する符号付き整数型。つまり、各符号付き整数型は、対応する符号なし整数型と同じオブジェクト表現を持ちます。同様に、拡張符号付き整数型のそれぞれには、対応する拡張符号なし整数型が存在し、同じ量の格納および整列要件があります。 [...]

答えははいです。 C11について

は、ここで対応する文(これはN1570からのものである)がある。

(§6.2.5/ 6)符号付き整数型のそれぞれについて、対応する(しかし異なる)があります(サイン情報を含む) ストレージの同じ量を使用し、同一のアラインメント要件を有する(符号なしのキーワードで指定された)符号なし整数 タイプ[...]

-1

はい、完全な保証があることsizeof(符号付きの型)はsizeof(符号なしの型) unsignedはその範囲を拡大するために符号付きの型の負の数のスペースしか取っていないからです。

+1

標準では、UINT_MAX > INT_MAX';サイン・マグニチュード・マシンはそれらを等しくすることができる。 – supercat

関連する問題