long和int数据类型之间的区别

时间:2009-05-22 22:17:51

标签: c++ types integer size

考虑到以下语句返回4,C ++中intlong类型之间有什么区别?

sizeof(int)
sizeof(long)

6 个答案:

答案 0 :(得分:53)

来自this参考:

  

原本打算使用int   “自然”字的大小   处理器。许多现代处理器都能   处理不同的字大小相等   缓解。

此外,这一点:

  

许多(但不是全部)C和C ++   实现,长度大于   一个int。今天最流行的桌面   平台,例如Windows和Linux,   主要在32位处理器上运行   这些平台的大多数编译器都使用   32位int,具有相同的大小   和表示为一个长期。

答案 1 :(得分:42)

标准给你的保证是这样的:

1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)

因此,sizeof (int)sizeof (long)完全有效,许多平台选择采用这种方法。你会发现一些平台int是32位,long是64位,long long是128位,但sizeof (long)似乎很常见。 / p>

(注意{C}从C99开始识别long long,但通常在C ++ 11之前作为C ++中的扩展实现。)

答案 2 :(得分:17)

您使用的是32位计算机或64位Windows计算机。在我的64位计算机上(运行Unix衍生操作系统,而不是Windows),sizeof(int) == 4,但是sizeof(long) == 8

它们是不同的类型 - 有时彼此相同,有时不相同。

(在过去的日子里,sizeof(int) == 2sizeof(long) == 4 - 虽然可能是C ++存在的前几天,但要想一想。从技术上讲,它仍然是合法的配置,尽管如此在嵌入式空间之外是不常见的,即使在嵌入式空间中也很不寻常。)

答案 3 :(得分:4)

在两者尺寸相同的平台上,答案一无所获。它们都代表有符号的4字节值。

然而,你不能依赖于这是真的。标准并未明确定义long和int的大小。编译器可以给出不同大小的类型,从而打破这种假设。

答案 4 :(得分:3)

long必须至少与int相同,并且可能但不一定更长。

在常见的32位系统上,int和long都是4字节/ 32位,根据C ++规范这是有效的。

在其他系统上,int和long long可能是不同的大小。我曾经在一个平台上工作,其中int是2个字节,long是4个字节。

答案 5 :(得分:2)

典型的最佳做法是不直接使用long / int / short。相反,根据编译器和操作系统的规范,将它们包装到头文件中,以确保它们完全保持您想要的位数。然后使用int8 / int16 / int32而不是long / int / short。例如,在32位Linux上,您可以像这样定义一个标题

typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;