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

这个问题已经在这里有了答案:

  • C ++中的int和long之间有什么区别? 9个答案

考虑到以下语句返回2944859673008276276480,C ++中的int和2944859673008276276482类型之间有什么区别?

sizeof(int)
sizeof(long)
Alex asked 2020-06-29T21:10:28Z
6个解决方案
53 votes

从此参考:

原本打算将一个int 的“自然”字长 处理器。 许多现代处理器可以 相等地处理不同的单词大小 缓解。

另外,这一点:

在许多(但不是全部)C和C ++上 实现,长于 一个int。 当今最受欢迎的台式机 平台,例如Windows和Linux, 主要在32位处理器上运行, 这些平台的大多数编译器使用 具有相同大小的32位int 和代表性很长。

Paul Sonier answered 2020-06-29T21:10:57Z
42 votes

标准的保证使您可以像这样:

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

因此,使long longsizeof (long)完全相等是完全有效的,并且许多平台都选择采用这种方法。 您会发现一些平台,其中int是32位,long是64位,long long是128位,但是sizeof (long)为4似乎很常见。

(请注意,从C99开始,在C中可以识别long long,但通常在C ++ 11之前将其实现为C ++的扩展。)

Dan Olson answered 2020-06-29T21:11:26Z
17 votes

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

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

(在真正的过去,sizeof(int) == 2sizeof(long) == 4 —尽管可能是在C ++出现之前的日子,但还是要考虑一下它。尽管如此,从技术上讲,它是一种合法的配置,尽管在嵌入式空间之外是不寻常的,而且很可能是不寻常的 即使在嵌入式空间中。)

Jonathan Leffler answered 2020-06-29T21:11:55Z
4 votes

在它们都具有相同大小的平台上,答案无济于事。 它们都代表带符号的4字节值。

但是,您不能依赖于此。 该标准未明确定义long和int的大小。 编译器可能会给类型提供不同的大小,从而打破这一假设。

JaredPar answered 2020-06-29T21:12:20Z
3 votes

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

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

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

abelenky answered 2020-06-29T21:12:49Z
2 votes

典型的最佳做法是不直接使用long / int / short。 相反,根据编译器和OS的规范,将它们包装到头文件中,以确保它们完全容纳所需的位数。 然后使用int8 / int16 / int32代替long / int / short。 例如,在32位Linux上,您可以定义这样的标头

typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;
fwlx answered 2020-06-29T21:13:10Z
translate from https://stackoverflow.com:/questions/900230/difference-between-long-and-int-data-types