小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来。当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了。虽然当时还小,但好像也知道那是电子计算器位数不足,从此觉得计算机虽然神奇,但计算能力也是有限的。
同样,计算机虽然计算能力强大,但计算能力也受位数的限制,并不是无穷的。以int类型为例,当我们定义一个int类型变量时,它的位数为32位,4个字节。
int n;//定义了一个整型变量,占4个字节
在C语言中,整型变量分为带符号和不带符号两种。int其实是signed int的简写,也就是带符号的。它保存的整数是有上下限的,最大为2147483647(21亿多),最小为-2147483648。
如果计算结果超出了int类型变量的上下限,会怎么样呢?我们来定义一个整型变量,并且将它初始化为最大值,然后再加1,看看会发生什么现象?
int n = 2147483647;//定义一个整型变量,并初始化为最大值
n++; //n现在是多少呢?
答案是-2147483648。很奇怪啊,一个正数加1竟然变成了负数。再仔细看看,这个负数就是int类型的最小值,也就是说在int类型的最大值上加1,就变到了最小值。所以老祖宗说物极必反嘛。
怎么理解呢?由于i