题目
来源:最大数值
编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
示例
解题思路及代码
1.思路
采用求平均值法:max(a,b) = ((a + b) + Math.abs(a - b)) / 2
重点是如何实现求abs(a - b)。提供位运算思路。
2. 代码
方法1
var maximum = function(a, b) {
return ((a + b) + Math.abs(a - b)) / 2;
};
方法2
var maximum = function(a, b) {
var k = ((a - b) >>> 63) & 1;
var aSign = a >>> 63;
var bSign = b >>> 63; // >>> 无符号右移,负数最高位符号以0填充 >> 负数最高位以1填充
var diff = aSign ^ bSign;
k = k * (diff ^ 1) | aSign & diff;
return b * k + a * (k ^ 1);
};