说明:
在我们做计算的时候,我们可能会遇到溢出的情况,虽然大多时候都不予理会或者去调试自己的代码符合某种要求。但有些情况需要我们自己去检测,这里就给出一个很简单的检测溢出的代码,以C++实现,当然,检测的是整型数据(也可以是其它类型的数据)。
代码如下:
#include<iostream>
using namespace std;
int tadd_ok(int x,int y) {//给出两个int型的数
int sum = x + y;
int neg_over = x<0&&y<0&&sum>=0;//这里和下一句都是逻辑:负数加负数结果为正数肯定溢出
int pos_over = x>=0&&y>=0&&sum<0;//正数加正数结果为负数肯定溢出
return !neg_over&&!pos_over;//存在上面两种情况之一的就溢出,那么返回0;不溢出那么返回1
}
小资料:
C++中,int占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]。
int占用2字节,16比特,数据范围为-32768~32767[-2^15~2^15-1]。
注意:int占多少个字节是由编译器决定的,ANSI标准定义int是占2个字节.
检测:
int main() {
cout<<tadd_ok(-0.21,-0.24)<<endl;
cout<<tadd_ok(2147483647,3)<<endl;
return 0;
}
//打印为:
1
0
证明后者溢出