long和int数据types的区别
考虑到下面的语句返回4
,C ++中的int
和long
types有什么区别?
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) == 2
和sizeof(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;