int和long有什么区别?

3
在C++中,int和long数据类型有什么区别?编写了以下代码:

可能是重复的问题:
什么是C++中int和long的区别?
C++中long vs int数据类型的差异

int _tmain(int argc, _TCHAR* argv[])
{
    cout<<"Int_Max = "<<INT_MAX<<endl;
    cout<<"Int_Min = "<<INT_MIN<<endl;
    cout<<"Long_Max = "<<LONG_MAX<<endl;
    cout<<"Long_Min = "<<LONG_MIN<<endl;
}

这就是结果...

Int_Max = 2147483647
Int_Min = -2147483648
Long_Max = 2147483647
Long_Min = -2147483648

我很困惑。


5
不明白提升和游戏编程与此有何关联? - Blagovest Buyukliev
2
或者游戏编程,就此而言。 - Nicol Bolas
之前已经回答过了:链接1 链接2 - SpeedBirdNine
2
对于boost的问题,我很抱歉。本来我想问另一个问题,但标签还在那里。我已经编辑过了,为造成的不便深感抱歉。 - Yoss
4个回答

5
根据标准规定,int 至少保证有 16 位,long 至少有 32 位。在大多数 32 位编译器中,它们是相同的,都是 32 位。但是,由于还存在 64 位、16 位甚至 8 位编译器,因此您不应该仅仅依赖这一点。

标准还保证了 char <= short <= int <= long 的大小关系。有趣的是,标准并没有强制规定 char 必须是 8 位,只要求 char 至少为 8 位。char 的大小可以是 9 位,这意味着你可能会有一个 9 位的字节。 - David Stone

3
在32位系统上,intlong通常没有区别。如果您在32位系统上需要一个64位的数据类型,请尝试使用long long代替。

1

如果要保证数据类型的大小,应该使用stdint中的类型(需要g ++中的C++0x支持,可以通过使用-std=c++0x进行编译来打开)。例如,您将使用int32_t和int64_t而不是int或long。如果您想要无符号数据类型,只需在开头加上'u'。uint16_t可能等于平台上的unsigned short。它是一个16位无符号整数。

但是,您应仅在确切空间很重要时使用它们。否则,“int”通常更可取。

有关更完整的参考,请参见https://en.wikipedia.org/wiki/Stdint.h,其中包括其他选项,例如int_least16_t用于至少16位宽的数据类型,以及其他内容。


0

char:至少8位:等于一个单位

short:至少16位:至少与char一样宽

int:至少16位:至少与short一样宽

long:至少32位:至少与int一样宽


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接