C语言之整数溢出

C语言之整数溢出

  • 一、整数溢出

一、整数溢出

在C语言中,如果整数超出对应类型的最大范围,会怎样呢?
看一个例子

#include 

int main()
{
	// int按32位算
	// 有符号最高位为符号位,所以取值范围为-2^31~2^31-1,即 -2147483648~2147483647
	// 无符号没有符号位,取值均为非负数,所以取值范围为0~2^32-1,即0~4294967295
	int i = 2147483647; // 有符号int类型整数的最大值
	unsigned int j = 4294967295; // 无符号int类型整数的最大值
	printf("%d\t%d\t%d\n", i, i+1, i+2);
	printf("%u\t%u\t%u", j, j+1, j+2);
	return 0;
}

在我的windows操作系统中,如上程序运行结果如下

2147483647      -2147483648     -2147483647
4294967295      0       1

不难看出,当整数超过其最大值时,会重新从最小值开始计算,它就类似于我们的24小时计时制。
但是,请注意如下两点:

  • 当整数超出它所能表示的最大范围时,系统并未通知用户,在编程时一定要注意此类问题
  • 溢出行为是未定义的行为,C标准并未定义有符号类型的溢出规则。以上描述的溢出行为比较有代表性,但是也可能会出现其他情况。

你可能感兴趣的:(C语言,c语言,开发语言)