zoukankan      html  css  js  c++  java
  • [NowCoder]无判断max

    请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。给定两个int ab,请返回较大的一个数。若两数相同则返回任意一个。

    import java.util.*;
    
    public class Max {
        public int getMax(int a, int b) 
        {
            return (a + b + Math.abs(a - b)) / 2;
        }
    }
    import java.util.*;
    
    public class Max {
        public int getMax(int a, int b) 
        {
            int r = a - b;
            r = r >> 31;
            
            return a + r*(a - b);
        }
    }

    思路1:

    a和b的差的绝对值是abs(a - b),然后差的绝对值加上a和b的和即为最大值的两倍。同理求两数较小的一个,a + b - abs(a - b)即可。

    思路2:

     c = (a-b)>>31

      (1)当a>=b时,(a-b)符号位为0,(a-b)右移31位,高位补0,右移后的结果为0;

      (2)当a<b时,(a-b)符号位为1,(a-b)右移31位,高位补1,故右移后的结果不是 我们想当然的1,而是-1。 

    a+c*(a-b)

      (1)当c=0时,说明a>=b,a+c*(a-b)=a,返回a;
      (2)当c=-1时,说明a<b,a+c*(a-b)=a-(a-b)=b,返回b。
  • 相关阅读:
    计算机图形方面职业计划体会
    Shader Wave
    Cook-Torrance光照模型
    Unity3D 固定功能函数
    Hermite (埃尔米特)曲线
    技能CD 效果 shader
    圆角计算 Shader
    抽象工厂模式
    单例模式
    unity 菜单栏添加新菜单
  • 原文地址:https://www.cnblogs.com/limeina/p/6684486.html
Copyright © 2011-2022 走看看