zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Use Visual studio 2010 build Python2.7.10
    ext4 disable journal
    ElasticSearch优化配置
    重载Python FTP_TLS 实现Implicit FTP Over TLS方式下载文件
    linux下对进程按照内存使用情况进行排序
    python 树遍历
    E: Unable to correct problems, you have held broken packages 解决方法
    C++ Lambda 表达式使用详解
    C++ 14 新特性总结
    Log4j配置
  • 原文地址:https://www.cnblogs.com/wuzetiandaren/p/4253932.html
Copyright © 2011-2022 走看看