2

可能重复:
64 位 Windows 上 long 的位大小是多少?

为什么当我在 Microsoft Visual Studio 2010 中编译为 x64 时,sizeof(unsigned int) == 4应该是8 == sizeof(int)吗?我在配置管理器和 command_line_compiler 中更改平台,所有设置都是 x64,但大小为unsigned int = 4.

我做错了什么?

4

3 回答 3

1

不是必须 = 8 = sizeof(int)

不,不必如此。各种整数类型的大小取决于实现,标准仅规定(在第 5.2.4.2 节中)一些最小范围。

例如,achar必须至少有 8 位,ashort int和 an intunsigned及其版本,必须与相应的有符号类型具有相同的大小和对齐要求)必须至少有 16 位,long必须至少有 32 位,以及long long至少64。

即使在 64 位系统上,int( 和unsigned int) 也是 32 位类型也是很常见的。

along是 32 位还是 64 取决于,它在大多数(如果不是全部)64 位 linux 系统上是 64 位,而在 Windows 64 位上是 32 位。

于 2012-11-11T21:27:46.970 回答
0

不是必须 = 8 = sizeof(int) 吗?

如果这是正确的英语,应该意味着“它的大小不应该等于 int 的大小”吗?那么答案是:是的,标准要求无符号整数类型及其对应的有符号类型具有相同的大小。如果不是这样,那么 Visual Studio 的编译器不符合要求(惊喜,惊喜......)。

然而,两者 intunsigned int都可能是 4 字节长——这并没有什么特别奇怪的地方,即使是在 64 位实现上也是如此。可能longlong long(和它们的无符号对应物)是 8 字节长。

于 2012-11-11T21:30:04.467 回答
0

语言标准没有说明sizeof(int)或任何数据类型。其实现已定义。

但它应该遵循这个规则:

1<=sizeof(char) < sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)
于 2012-11-11T21:31:52.263 回答