Leetcode : 面试题 16.07. 最大数值(位运算)

面试题 16.07. 最大数值

编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。

示例:

输入: a = 1, b = 2
输出: 2
通过次数3,781提交次数5,250

这道题的本质是用max(a,b)的原理,平均法max(a,b)=(a+b+abs(a-b))/2;
那么问题就是如何求abs
因为负数如果右移会自动在左边补1,所以如果负数移动到最大,最后这个数会变为-1
32位下
abs(a)=(a^(a>>31))-(a>>31)

class Solution {
public:
    int maximum(int a, int b) {
             long _sum=long(a)+long(b);
             long _diff=long(a)-long(b);
             long _abs_diff=(_diff^(_diff>>63))-(_diff>>63);
             return (_sum+_abs_diff)/2;
    }
};

你可能感兴趣的:(leetcode)