程序在2147483647之后打印-ve整数

时间:2014-02-20 02:29:28

标签: c gcc

我最近开始学习C.我已经读过整数范围的gcc是 - 214783648 to +2147483647

在CentOS上使用GCC。

我明白它是2 ^ 32被分成两部分和0。

  • 这是对编译器施加的限制吗?这有什么优势吗?或者我的编译器是32位? (据我所知,我的电脑是64位)。

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

先谢谢

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

以下是必读:http://en.wikipedia.org/wiki/Binary_number