在我的机器中,我得到以下结果:
sizeof(long) = 8
sizeof(long int) = 8
在哪里使用long int
,为什么不直接使用int
?
在我的机器中,我得到以下结果:
sizeof(long) = 8
sizeof(long int) = 8
在哪里使用long int
,为什么不直接使用int
?
如您的评论所示,您提供的示例与您提出的问题无关。如果您的问题是:
所以我的问题是在哪里使用
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
整数类型不一定准确反映其范围,因为可能存在填充位和负零。
请注意,即使在您排列单词之前,以下所有内容都表示相同的类型:
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
那么使用or的主要原因int
是将接口与特定的 API 匹配(因为类型仍然不同,即使它们支持相同的范围)。有时,范围long
为 ±(2 63 -1)(64 位系统与 64 位 Windows 不同);那么你会使用long
如果您需要一个大于int
. 但是,您也可以考虑使用来自<inttypes.h>
或之类的“便携式”类型,<stdint.h>
例如int32_t
and int64_t
。但是,如果 API 使用不同的类型,您可能应该使用 API 的类型。
如果您打算询问何时使用long
and long int
,那么这是一个品味问题。我会long
毫无顾忌地使用plain。除非有与其他声明对称的令人信服的理由,否则我不会使用其他任何东西。