package com.heu.wsq.leetcode.interview_book;
/**
* 面试题 16.07. 最大数值
* @author wsq
* @date 2021/5/4
* 编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
*
* 示例:
* 输入: a = 1, b = 2
* 输出: 2
*/
public class Maximum {
public int maximum(int a, int b){
// 这里将int转为long,是为了防止a - b导致int溢出从而导致符号位判断有误
long x = (long)a - (long)b;
// 将long右移63位,获取对应的符号
// 当x为正数时,右移63位,最后结果为00000(也就是0)
// 当x为负数时,右移63位,最后结果为11111(也就是-1)
int k = (int) (x >> 63);
// 巧妙的根据k的值,来判断最后结果为a还是b
return (1 + k) * a - b * k;
}
}