面试题:两个整数不使用比较运算符和API得到更大的那个值

64 篇文章 1 订阅

两个整型数,不准用if 、switch 、?:等判断语句求出两者大值,不能使用api

 

我这里2个实现方法如下:

[java]  view plain copy
  1. /** 
  2.  * 不用比较运算符得到2个数字的更大值。 
  3.  *  
  4.  * @author JAVA世纪网(java2000.net) 
  5.  */  
  6. public class Test3 {  
  7.   public static void main(String[] args) {  
  8.     int[] as = { 445544440, -44, -55 };  
  9.     int[] bs = { 554444440, -55, -44 };  
  10.     for (int i = 0; i < as.length; i++) {  
  11.       System.out.println(max2(as[i], bs[i]));  
  12.       System.out.println(max3(as[i], bs[i]));  
  13.       System.out.println();  
  14.     }  
  15.   }  
  16.   /** 
  17.    * 使用移位操作 
  18.    *  
  19.    * @param a 
  20.    * @param b 
  21.    * @return 
  22.    */  
  23.   public static int max2(int a, int b) {  
  24.     int[] nums = { a, b };  
  25.     return nums[(a - b) >>> 31];  
  26.   }  
  27.   /** 
  28.    * 使用乘法操作 
  29.    *  
  30.    * @param a 
  31.    * @param b 
  32.    * @return 
  33.    */  
  34.   public static int max3(int x, int y) {  
  35.     return x-(x-y)*((x-y)>>>31);  
  36.   }  
  37. }  

 

重点就是那个>>> 的移位操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值