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)