为什么当我在 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
和unsigned int
都可能是 4 字节长——这并没有什么特别奇怪的地方,即使是在 64 位实现上也是如此。可能long
或long long
(和它们的无符号对应物)是 8 字节长。
语言标准没有说明sizeof(int)
或任何数据类型。其实现已定义。
但它应该遵循这个规则:
1<=sizeof(char) < sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)