取两个整数中间值不溢出
- 今天用二分写算法的时候发现竟然超时了,后面调试发现原来是2个整数相加溢出变成负数了,记录一下不溢出取中间值的方法
- 下面是一般取中间值的写法
int m = (low+high)/2;
- f,f2记录两个数的奇偶情况,如果2个都是奇数,需要再2个数各自除二的结果上再加一,而只有一个奇数或者没有奇数的时候直接返回和就行了。
public int middle(int num1,int num2){
int f = num1&1,f2 = num2&1;
int tmp = num1>>1;
int tmp2 = num2>>1;
tmp += tmp2;
if((f+f2)==2){
return tmp+1;
}else{
return tmp;
}
}
- 这种写法最简单,不会溢出
int m = low + (high-low)/2;