前言
数字在计算机中采用补码表示,以int来表示其范围[-2^31, 2^31-1]。具体细节不谈了,如果求int的最小值呢?当然limits.h中有定义。
如何求最值
上代码吧!
#include <iostream>
#include <limits.h>
using namespace std;
int main()
{
int i = 1<<31;
int j = -i-1;
if(i == INT_MIN)
{
cout << i << endl;
}
if(j == INT_MAX)
{
cout << j << endl;
}
return 0;
}
上面的这段代码是进行我验证方法对不对,通过结果可知,方法是可行的。
如何判断溢出
在加法中,同号相加得到的数为异号,那么就溢出了。
#include <iostream>
#include <limits.h>
using namespace std;
int main()
{
int i = 1<<31;// INT_MIN
int j = -i-1;// INT_MAX
int c = j-100;
// c+c > j成立,那么溢出. 但是在计算机中c+c是负数了。所以必须
// 转变一下, c>j-c;溢出
cout << c+c << endl;
if(c > j-c)
{
cout << c << " > " << j-c << endl;
}
return 0;
}
这种方法呢,是忘了使用limits.h的一种解决方案,如果记得limits.h,干嘛非得自己在计算呢?
直接使用INT_MAX即可。
#include <iostream>
#include <limits.h>
using namespace std;
int main()
{
int i = 1<<31;// INT_MIN
int j = -i-1;// INT_MAX
int c = j-100;
// c+c > j成立,那么溢出. 但是在计算机中c+c是负数了。所以必须
// 转变一下, c>j-c;溢出
cout << c+c << endl;
if(c > INT_MAX-c)
{
cout << c << " > " << j-c << endl;
}
return 0;
}