首页 > 其他 > 详细

程序员面试金典-面试题 16.07. 最大数值

时间:2020-03-14 15:23:39      阅读:62      评论:0      收藏:0      [点我收藏+]

题目:

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

示例:

输入: a = 1, b = 2
输出: 2

分析:

利用两数的和加上两数差的绝对值除以2得到较大的数。

不过Math.abs()中判断了数字大于还是小于0;

https://leetcode-cn.com/problems/maximum-lcci/solution/ji-yu-wei-yun-suan-shi-xian-da-xiao-bi-jiao-by-dex/

这里有一个利用位运算求解绝对值的方法。

以-3为例(var ^ (var >> 7)) - (var >> 7)

-3>>7 = 0xFF,而-3^0xFF相当于取反码,-0xFF相当于+1.最后结果得3,实际上-3的补码就是通过3取反加1得来的。

程序:

class Solution {
    public int maximum(int a, int b) {
        long sum = (long)a + (long)b;
        long diff =(long)a - (long)b;
        diff = (diff ^ (diff >> 63)) - (diff >> 63);
        return (int)((sum + diff) / 2);
    }
}

 

程序员面试金典-面试题 16.07. 最大数值

原文:https://www.cnblogs.com/silentteller/p/12492079.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!