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

转载于:https://www.cnblogs.com/wuzetiandaren/p/4253932.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值