0

在我的机器中,我得到以下结果:

sizeof(long) = 8

sizeof(long int) = 8

在哪里使用long int,为什么不直接使用int

4

2 回答 2

5

如您的评论所示,您提供的示例与您提出的问题无关。如果您的问题是:

所以我的问题是在哪里使用long int,为什么不直接使用long

...那么答案很简短:使用您选择的任何一个,因为它们是等效的。

这是您提出的问题,然后是答案:

所以我的问题是在哪里使用long int,为什么不直接使用int

int保证至少能够存储位于 -32767 和 32767 范围内的值。实现可能会做出允许它存储该范围之外的值的决定,但不是必须的。

long int或者long保证至少能够存储位于 -2147483647 和 2147483647 范围内的值。同样,实现可能会做出允许它存储该范围之外的值的决定,但不是必须的。

因此,如果您对开发便携式软件感兴趣,那么您可以使用int那些不希望存储超出该最小范围 (-32767 .. 32767) 的值的对象int。同上long

如果您对开发可移植软件不感兴趣,并且只关心自己的实现,请使用最能满足您要求的类型。int您可以通过查看INT_MININT_MAX以及查看<limits.h>和来获得您的实现范围。longLONG_MINLONG_MAX

请注意,sizeof整数类型不一定准确反映其范围,因为可能存在填充位和负零。

于 2013-04-08T04:49:56.627 回答
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)(或多或少)。有时,范围longint(32 位系统;64 位 Windows)相同;long那么使用or的主要原因int是将接口与特定的 API 匹配(因为类型仍然不同,即使它们支持相同的范围)。有时,范围long为 ±(2 63 -1)(64 位系统与 64 位 Windows 不同);那么你会使用long如果您需要一个大于int. 但是,您也可以考虑使用来自<inttypes.h>或之类的“便携式”类型,<stdint.h>例如int32_tand int64_t。但是,如果 API 使用不同的类型,您可能应该使用 API 的类型。

如果您打算询问何时使用longand long int,那么这是一个品味问题。我会long毫无顾忌地使用plain。除非有与其他声明对称的令人信服的理由,否则我不会使用其他任何东西。

于 2013-04-08T05:02:46.337 回答