【问题标题】:C: Why does integer act as long integer?C:为什么整数充当长整数?
【发布时间】:2011-07-13 03:57:44
【问题描述】:

据我所知,整数的范围是 32,768 到 32,767。 长整数的范围是 2,147,483,648 到 2,147,483,647。 我仔细检查了维基百科以确保。

现在的问题:

int a=2147483647;
printf("a: %d\n", a);

为什么会这样?如果我将 1 添加到 2147483647,那么它会打印垃圾,如果变量是长整数,则可以预期。但是为什么它首先允许我将一个长整数分配给一个整数呢?

【问题讨论】:

  • 您查看了哪个维基百科条目? 32 位机器上的整数应该在 -2b 到 +2b 的范围内。
  • en.wikipedia.org/wiki/Integer_%28computer_science%29 虽然我可能读错了。我的想法是,对于 int、long int、float 的大小应该有一个标准。但这不是意味着一个程序在不同的处理器上表现得非常不同吗?作为程序员,有人会如何处理这个问题?

标签: c integer range variable-assignment long-integer


【解决方案1】:

sizeof(short)

【讨论】:

    【解决方案2】:

    你知道的都是错的。

    与 Java 等其他一些语言不同,C 中 intlong 的确切大小是由实现定义的(有设定限制)。显然,您使用的平台int 是 32 位宽,但在其他平台上它可能是 16 位,而在某些平台上 int 是 64 位宽。

    同样,在某些平台上,long 是 32 位宽;在其他情况下,它是 64 位宽。如果平台选择这样做,它可能会更宽。

    【讨论】:

      【解决方案3】:

      int 的实际宽度通常取决于实现。您可以使用limits.h 标头中的INT_MAX/INT_MIN 常量来找出真正的范围。

      在 x86 机器上,int 通常是 4 个字节,因此 2^31-1 确实是它可以拥有的最大值。

      【讨论】:

      • “在 x86 机器上 int 是 ...”,对于 x >= 3 的值。对于 '286、'186 和 '086,int 通常为 2 个字节。但是,除非 OP 有一台超过 20 年的计算机,否则您的说法是正确的。
      【解决方案4】:

      据我所知,整数的范围是 32,768 到 32,767。

      这是不正确的。 int 的范围至少为 -32,767 到 32,767;它可能具有更大的范围,并且在大多数 32 位和 64 位平台上都有。

      您可以通过检查<limits.h> 中定义的INT_MAXINT_MIN 宏来找出您平台上int 类型的范围。

      【讨论】:

      • +1,虽然实际上它的范围至少为 +/-32767,不一定包括 -32768,以允许 stupid 其他签名表示。
      • @Steve:是的;我只是在查找它,因为我认为它必须支持有符号震级,而 -32,768 到 32,767 则不会。谢谢。
      猜你喜欢
      • 2014-12-12
      • 2021-09-26
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      相关资源
      最近更新 更多