【问题标题】:Program prints -ve integers after 2147483647 [duplicate]程序在 2147483647 之后打印 -ve 整数 [重复]
【发布时间】:2014-03-20 18:01:51
【问题描述】:

我最近开始学习C。我读到gcc的整数范围是-214783648 to +2147483647

在 CentOS 上使用 GCC。

我知道是2^32被分成两部分和0。

  • 这是对编译器的强加限制吗?这有什么好处吗?还是我的编译器是 32 位的? (据我所知,我的电脑是 64 位的)。

  • 如果一个人超过了这个限制,应该怎么办?

提前致谢

【问题讨论】:

  • 如果您需要更大的值,请使用long 而不是int
  • @user long 是我所在的 32 位
  • 习惯使用和了解这些的大小:std::uint8_tstd::uint16_tstd::uint32_tstd::uint64_t 及其签名对应项:std::int8_tstd::int16_tstd::int32_tstd::int64_t..终于习惯了认识和使用std::size_t.
  • @CantChooseUsernames 你在那里发布的内容看起来像 C++...
  • @DennisMeng 对不起。忘了这是剖腹产。尽管如此,这些类型也应该存在于 C 中。只需删除std:: 并使用#include <stdint.h>ideone.com/j6WwbP

标签: c gcc


【解决方案1】:

整数的大小是特定于平台的。 C 标准并没有确切说明 int 必须有多少位,它只是说 int 必须至少为 16 位长。这不是对编译器的限制 - 相反,它是定义平台的众多编译器属性之一。

您平台的位数不会直接影响您平台上int 的大小。您通常可以使用相同的编译器生成 32 位和 64 位代码(使用 gcc,您可以使用标志 -m32 或 -m64),但内置类型的大小不一定会改变。

如果您需要更大的整数范围,您可以使用long long,它保证至少有 64 位。此外,gcc 支持 128 位整数类型__int128。如果您需要更大的范围,可以使用任意精度的数学包。

【讨论】:

    【解决方案2】:

    它与二进制数和整数数据类型有多少位有关。通常一个整数由 4 个字节 = 32 位组成,因此一个整数可以存储 2^32 个值 [0, 232 - 1] 或 [-214783648, 2147483647] 用于有符号整数。

    据我所知,如果超出范围的行为是未定义的。这被称为Integer overflow

    这里是必读的:http://en.wikipedia.org/wiki/Binary_number

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2012-06-30
      • 1970-01-01
      • 2022-11-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多