您的位置:首页 > 其它

不用任何比较判断找出两个数中较大的

2017-11-02 09:42 211 查看
/**
* Created by lxw, liwei4939@126.com on 2017/11/2.
* 不用任何比较判断找出两个数中较大的
* 给定两个32位整数a和b,返回较大的数
*/
public class getMax {

//取反操作
public int flip(int n){
return n^1;
}

//符号函数
public int sign(int n){
return flip((n>>31) & 1);
}

// a-b的值可能会溢出
public int getMax1(int a, int b){
int c= a - b;
int scA =sign(c);
int scB = flip(scA);
return a * scA + b * scB;
}

// 不用考虑a-b的值会不会溢出
public int getMax2(int a, int b){
int c= a-b;
int sa = sign(a);
int sb = sign(b);
int sc = sign(c);
int difSab = sa ^ sb;
int sameSab = flip(difSab);
int returnA = difSab * sa + sameSab * sc;
int returnB = flip(returnA);
return a * returnA + b * returnB;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐