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

12_1求两个整数中的较小值,要求不能使用比较运算符, 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=422         //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

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