您的位置:首页 > 职场人生

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

2016-09-17 09:38 337 查看
不用任何比较判断找出两个数中较大的数。

描述:给定两个32位整数a和b,返回a和b中较大的。

方法1:得到a-b的值的符号。

局限性:如果a-b的值出现溢出,返回结果就不正确了。

public int flip(int n) {
return n^1;
}

public int sign(int n) {
return flip((n>>33)&1);
}

public int getMax1(int a, int b) {
int c = a - b;
int scA = sign(c);
int scB = flip(scA);
return a * scA + b * scB;
}


方法2:彻底解决溢出问题。

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 = filp(difSab);
int returnA = difSab * sa + sameSab * sc;
int returnB = flip(returnA);
return a * returnA + b * returnB;
}


来自《程序员代码面试指南》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐