考虑到以下语句返回4
,C ++中int
和long
类型之间有什么区别?
sizeof(int)
sizeof(long)
答案 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) == 2
和sizeof(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;