C/C++中int型上下限INT_MAX INT_MIN以及溢出

C中常量INT_MAX和INT_MIN分别表示最大、最小整数,定义在头文件limits.h中。

1.常量INT_MAX和INT_MIN值的大小

int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1,INT_MIN= -2^31。C中int类型范围是-2147483648到2147483647 。 C/C++中,所有超过该限值的数,都会出现溢出,出现warning,但是并不会出现error。

2.关于INT_MAX INT_MIN的运算

由于二进制编码按原码、补码和反码的规则进行运算,所有程序中对INT_MAX和INT_MIN的运算应当格外注意,在出现溢出的时候,不遵循数学规则。

INT_MAX + 1 = INT_MIN

INT_MIN - 1 = INT_MAX

abs(INT_MIN) = INT_MIN

特别的:INT_MAX + 1 < INT_MAX, INT_MIN - 1 > INT_MIN, abs(INT_MIN) < 0. 另外,在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。

(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN; (2)最严重的上溢是INT_MAX + INT_MAX :结果是-2; (3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX; (4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。