在我的机器中,我得到以下结果:
sizeof(long) = 8
sizeof(long int) = 8
在哪里使用long int
,为什么不使用int
?
答案 0 :(得分:5)
如您的评论所示,您提供的示例与您提出的问题无关。如果你的问题是:
所以我的问题是在哪里使用
long int
,为什么不使用long
?
...然后答案很简短:使用您选择的任何一个,因为它们是等效的。
以下是您提出的问题,然后是答案:
所以我的问题是在哪里使用
long int
,为什么不使用int
?
int
保证能够存储至少在-32767和32767范围内的值。实现可能会做出允许它存储超出该范围的值的决策,但不是'要求。
long int
或long
保证能够至少存储-2147483647和2147483647范围内的值。同样,实现可能会做出允许它存储的决策超出该范围的值,但不是必需的。
因此,如果您对开发便携式软件感兴趣,那么对于不希望存储超出该最小范围的值的对象使用int
是有意义的(-32767 .. 32767 )int
。同上long
。
如果您对开发便携式软件不感兴趣,并且只关心自己的实现,请使用最符合您要求的任何类型。您可以通过查看int
来审核INT_MIN
和INT_MAX
以及<limits.h>
,查看long
和LONG_MIN
,从而获得LONG_MAX
的实施范围}。
请注意,sizeof
整数类型不一定是其范围的精确反映,因为可能存在填充位和负零。
答案 1 :(得分:0)
请注意,即使在您置换单词之前,以下所有内容都表示相同的类型:
long
long int
signed long int
signed long
通过排列,您可以:
long l0;
long int l1;
int long l2;
signed long int l3;
signed int long l4;
long signed int l5;
long int signed l6;
int signed long l7;
int long signed l8;
signed long l9;
long signed lA;
大多数时候,大多数理智的人只是简单地写long
来表示这种类型。
您的实际问题是关于何时使用long int
以及何时使用int
。从技术上讲,int
保证的值范围是±32,767(或±(2 15 -1))。如果您需要大于此值的值,则应使用long
。但是,您经常发现int
的范围为±(2 31 -1)(或多或少)。有时,long
的范围与int
相同(32位系统; 64位Windows);那么使用long
或int
的主要原因是将接口与特定API匹配(因为类型仍然是不同的,即使它们支持相同的范围)。有时,long
的范围是±(2 63 -1)(除了64位Windows之外的64位系统);如果您需要的范围大于long
,则可以使用int
。不过,您也可以考虑使用<inttypes.h>
或<stdint.h>
中的“可移植”类型,例如int32_t
和int64_t
。但是,如果API使用不同的类型,则应该使用API的类型。
如果您打算询问何时使用long
和long int
,那么这是一个品味问题。我会毫不犹豫地使用普通long
。除非有一个令人信服的理由与其他声明对称,我不会使用其他任何东西。