long和int数据types的区别

考虑到下面的语句返回4 ,C ++中的intlongtypes有什么区别?

 sizeof(int) sizeof(long) 

从这个参考:

int最初是为了处理器的“自然”字大小。 许多现代处理器可以轻松处理不同的字大小。

另外,这一点:

在许多(但不是全部)C和C ++实现中,long比int更大。 当今最stream行的桌面平台,如Windows和Linux,主要运行在32位处理器上,大多数这些平台的编译器都使用32位int,它们的大小和表示forms相同。

保证标准给你去这样:

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

所以sizeof (int)sizeof (long)是相等的,而且很多平台都select这个方法。 你会发现一些平台,其中int是32位, long是64位, long long是128位,但sizeof (long)对于4是很常见的。

(请注意,从C99开始, long long被认为是C,但在C ++ 11之前,通常在C ++中作为扩展实现。)

您位于32位机器或64位Windows机器上。 在我的64位机(运行Unix衍生O / S,不是Windows), sizeof(int) == 4 ,但sizeof(long) == 8

他们是不同的types – 有时相同的大小,有时不一样。

(在过去的日子里, sizeof(int) == 2sizeof(long) == 4 – 虽然可能是C ++存在之前的日子,但是从技术上来说,这是一个合法的configuration,尽pipe在embedded式空间之外是不寻常的,甚至在embedded式领域也是非常不寻常的。)

在他们都有相同大小的平台上,答案是没有的。 它们都表示有符号的4个字节值。

但是,你不能依靠这是真实的。 long和int的大小并不是由标准明确定义的。 编译器可以给出不同的大小,从而打破这个假设。

长度必须至less与int相同,可能但不一定更长。

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

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

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

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