12_2求两个整数中的较小值,要求不能使用比较运算符, if-else, a>b?a:b, while for

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4253932.html 

声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。

题目:求两个整数中的较小值,要求不能使用比较运算符, if-else, a>b?a:b, while for, 内嵌汇编递归第三方函数。

  在网上看到一些网友给出了一些思路,比我自己想到的要好,再此深表感谢,实现如下:

java实现源码:

 1 package com.interview;
 2 /**
 3  * 题目:求两个整数中的较小值,要求不能使用比较运算符, if-else, a>b?a:b,  while for,
 4  * 内嵌汇编递归第三方函数。
 5  * @author wjh
 6  *
 7  */
 8 public class _12_2MinData {
 9 
10     public static void main(String[] args) {
11         int a= 255;
12         int b= 30;
13         System.out.println(a+"与"+b+"中较小的数为:"+min(452, 28));
14     }
15     
16     //比较的函数,用于返回两个整数的较小值
17     private static int min(int a, int b)  
18     {  
19         int sum = a + b;        //先算两者的和  
20         b = a - b;    
21         //1)java 中int类型的数据占4字节,下面的size=4
22         //2)如果a > b,那么得到b=a-b是正值,那么下一行(b>>(size*8 - 1))将等于0,否则为-1 
23             //那么该语句可简化为a+=b*0(b为a和b的差值),因此得到a就是较大值  
24         //3)如果a < b,根据上面的解释,那么(b>>(size*8 - 1))将等于-1,
25             //那么该语句可简化为a+=b*(-1)(b为a和b的差值),因此得到a就是较大值;  
26         a += b * (b >> 4 * 8 - 1);      
27         return sum - a;     //用和减去较大值,得到较小值  
28     }  
29 }

运行结果:

255与30中较小的数为:28

posted @ 2015-01-27 20:57  武则天大人  阅读(756)  评论(0编辑  收藏  举报