【问题标题】:Under what circumstances can long int be used in CC语言中什么情况下可以使用long int
【发布时间】:2013-03-30 01:54:57
【问题描述】:

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

sizeof(long) = 8

sizeof(long int) = 8

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

【问题讨论】:

  • 什么时候需要至少 32 位的东西?
  • 也许你的意思是使用long int,为什么不直接使用long
  • long 只是long int 的简写,它们完全相同。进一步的例子/琐事:以同样的方式,你可以有一个声明unsigned a;,是unsigned int a;的简写
  • 假设预期的问题是“为什么使用long int 而不仅仅是long”,答案很明确。如果看到声明为 long 而不是 long int 的变量,许多程序员会感到困惑。许多人会争辩说只使用long 是完全可以接受的,而且许多人更喜欢这种风格。这纯粹是一种风格选择。
  • @cnicutar:这正是我的假设(因此我之前的评论),以至于我花了两到三遍阅读你的评论才意识到 OP 没有写出我的想法( s)他有... :)

标签: c int long-integer


【解决方案1】:

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

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

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

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

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

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

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

因此,如果您对开发便携式软件感兴趣,则可以将 int 用于预期不会存储超出该最小范围 (-32767 .. 32767) 的值的对象intlong 同上。

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

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

【讨论】:

  • 要添加此内容,请注意问题中的结果与键盘 C 库的结果之间的差异:codepad.org/hW92RusA。虽然 int 和 long int 的“sizeof”现在在键盘中显示“4”,但它们仍然能够处理 C 标准要求的数字范围,如上述帖子中可修改的左值所述。
  • @MarshallConover sizeof (short) 可能是 1,仅此一项就无法告诉您 short 可以表示的值的范围。
  • 你怎么能代表 32767,我知道这是 C 标准对只有 8 位的“短”的要求?还是我误解了“sizeof”返回的内容?
  • @MarshallConover sizeof 不返回任何内容。 sizeof 是一个运算符,类似于 &address-of 运算符。运算符和操作数构成表达式,用于计算。运算符为sizeof 的表达式计算为一个类型或表达式类型中chars 的数量。 charCHAR_BIT 来自<limits.h>)中的位数必须至少为 8,但可能更多。例如,请参阅this question。因此,sizeof (short) 很可能在 CHAR_BIT >= 16 时计算为 1。
  • 哦,哇,感谢您的解释和链接-我不知道 sizeof 使用 CHAR 作为其单位,并且 CHAR_BIT 可以更改。谢谢!
【解决方案2】:

请注意,即使在您排列单词之前,以下所有内容都表示相同的类型:

  • 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(或 ±(215-1))。如果您需要更大的值,则应使用long。但是,您经常会发现 int 的范围为 ±(231-1)(或多或少)。有时,long 的范围与int 相同(32 位系统;64 位 Windows);那么使用longint 的主要原因是将接口与特定的API 匹配(因为类型仍然不同,即使它们支持相同的范围)。有时,long 的范围是 ±(263-1)(64 位系统除了 64 位 Windows);如果您需要大于int 的范围,那么您将使用long。但是,您也可以考虑使用<inttypes.h><stdint.h> 中的“便携式”类型,例如int32_tint64_t。但是,如果 API 使用不同的类型,您可能应该使用 API 的类型。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 2012-06-02
    • 2010-10-10
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多