定义
????????C/C++中的 <limits.h> 头文件中定义:
#define INT_MAX???2147483647
#define INT_MIN????(-INT_MAX - 1)
- INT_MAX为 2^31-1 ,即?2147483647 ;
- INT_MIN为 -2^31 , 即 2147483648 ;
使用的注意事项
- 在使用INT_MAX和INT_MIN时,需要 #include<limits.h>;
- 不能直接用-2147483648来表示INT_MIN,该表达式相当于给+2147483648取负值,会先产生整型溢出问题;
溢出问题
? ? ? ? 在c/c++中,int 类型的取值范围为 [ -2147483648, 2147483647] ,超过这个范围则会产生溢出问题。
- 当发生上溢时,即 INT_MAX + N (N为任意正整数),先进行?INT_MAX + 1 =?INT_MIN ,这时上溢问题就解决了,之后便是正常的加减法,即 INT_MIN 再加上剩余的数,其结果为 INT_MIN + N -1;
- 当发生下溢时,即 INT_MIN -?N (N为任意正整数),先进行 INT_MIN -?1 =?INT_MAX ,这时下溢问题就解决了,之后便是正常的加减法,即 INT_MAX 再减去剩余的数,其结果为 INT_MAX?-?N +1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
- 多次溢出时,依次解决。例如?INT_MAX + 1 - 1 ,该表达式根据 + / - 运算符的左结合性,先会发生?INT_MAX + 1 =?INT_MIN ,然后发生?INT_MIN -?1 =?INT_MAX?,其结果就为 INT_MAX ,依次类推;
? ? ? ??
|