题目
编写一个方法,找出两个数字a
和b
中最大的那一个。不得使用if-else或其他比较运算符。
示例:
输入: a = 1, b = 2
输出: 2
1
2
2
题解
java
public int maximum(int a, int b) {
// a b的符号位
int flagA = a >>> 31;
int flagB = b >>> 31;
// 获得a-b的差值符号位
// 若差值为负数flag标识为1 否则为0
// 若ab符号位一致 则结果符号位为a-b的符号位 a、b都是正数或者负数时 结果为a-b不会越界
// 若ab符号位不一致 结果为a的符号位 a为负数b为正数或者a为正数b为负数结果可能会越界
int flag = (flagA ^ flagB ^ 1) * (a - b) >>> 31 | (flagA ^ flagB) * flagA;
// 若a > b flag为0 flag^1 = 1 结果为a
// 若b > a flag为1 flag^1 = 0 结果为b
return (flag ^ 1) * a + flag * b;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13