Microsoft Visual Studio 2010でx64としてコンパイルすると、なぜsizeof(unsigned int) == 4
ですか?しなければならないのではない8 == sizeof(int)
でしょうか?構成マネージャーとcommand_line_compilerでプラットフォームを変更します。すべての設定はx64ですが、サイズはunsigned int = 4
。です。
私は何を間違えましたか?
Microsoft Visual Studio 2010でx64としてコンパイルすると、なぜsizeof(unsigned int) == 4
ですか?しなければならないのではない8 == sizeof(int)
でしょうか?構成マネージャーとcommand_line_compilerでプラットフォームを変更します。すべての設定はx64ですが、サイズはunsigned int = 4
。です。
私は何を間違えましたか?
しなければなりませんか = 8 = sizeof(int)
いいえ、そうである必要はありません。さまざまな整数型のサイズは実装次第であり、標準では (セクション 5.2.4.2 で) いくつかの最小範囲のみが規定されています。
たとえば、 achar
は少なくとも 8 ビット、 ashort int
および an int
(unsigned
対応する符号付き型と同じサイズとアラインメントの要件を持つ必要があるバージョンも) は少なくとも 16 ビット、long
少なくとも 32 ビット、およびlong long
少なくとも64。
64 ビット システムでも、int
(およびunsigned int
) は 32 ビット型であることが一般的です。
along
が 32 ビットか 64 かに依存しますが、ほとんどの (すべてではないにしても) 64 ビット Linux システムでは 64 ビットであり、Windows 64 ビットでは 32 ビットです。
= 8 = sizeof(int)でなければなりませんか?
これが正しい英語である場合、「intのサイズと同じサイズであってはならない」という意味になりますか?その場合、答えは次のとおりです。はい、標準では、符号なし整数型とそれに対応する符号付き型が同じサイズである必要があります。そうでない場合、Visual Studioのコンパイラは準拠していません(サプライズ、サプライズ...)。
ただし、との両方 int
が4バイトの長さである可能性がありunsigned int
ます。64ビットの実装であっても、特に奇妙なことは何もありません。おそらくlong
またはlong long
(およびそれらの符号なしの対応物)は8バイトの長さです。
sizeof(int)
言語標準では、またはデータ型については説明されていません。その実装が定義されています。
ただし、次のルールに従う必要があります。
1<=sizeof(char) < sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)