如果整数超出了对应类型的取值范围会怎么样?int类型[-2147483648,2147483647]
/*整数溢出*/
#include <stdio.h>
int main(void)
{
int i = 2147483647;//int 类型[-2147483648,2147483647]
unsigned int j = 4294967295;//无符号int类型 [0,4294967295]
printf("%d %d %d\n", i, i+1, i+2);
printf("%u %u %u\n", j, j+1, j+2);
return 0;
}
输出结果:
整数溢出时,会重新从起点开始。区别在于int与unsigned int表示的范围不同,故起点不同。
溢出行为是未定义的行为,C标准并未定义有符号类型的溢出规则。
注意,当 i 溢出其相应类型所能表示的最大值时,系统不会告知用户,在编程的时候必须自己留意。