位运算比较

对于两个32位整数a和b,请设计一个算法返回a和b中较大的。但是不能用任何比较判断。若两数相同,返回任意一个。
给定两个整数ab,请返回较大的数。

测试样例:1,2
返回:2

思路

将整数看成2进制数,逐位进行比较.从第30位开始(因为第31位是符号位),采用与mask按位与的方式提取出每一位上的数字, 如果提取出的数字相等就可以进行比较.与mask按位与结果不是0的那个数字比较大.
例如整数1和2,看成01和10.分别与mask=10按位与,得到00和10,这说明10比01要大.
PS:符号位为1说明是负数, 符号位为0是正数.

代码如下:

  public int getMax(int a, int b) {
       
        int mask=1<<31;  
        //第一位符号位要特殊处理
        if(((a&mask)^(b&mask))==1){
               if((a&mask)==0)return a;
               else return b;
        }        
        mask>>>=1;
        while(mask!=0){
           if(((a&mask)^(b&mask))!=0){
               if((a&mask)==0)return b;
               else return a;
           }
           else{
               mask>>=1;
           }            
        }
        return a;  //两数相等
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于两个32位整数a和b,请设计一个算法返回a和b中较大的。但是不能用任何比较判断。若两数相同,返回任意一个。 给...
    X_Y阅读 1,029评论 0 0
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,092评论 1 19
  • 1.没有早起,餐饮不够规律; 2.眼睛好些了,左臂疼痛加重; 3.参加礼拜; 4.看了电影《疯狂动物城》,《功夫熊...
    Napoleon阅读 203评论 0 0
  • 每一个生命都像是一个被线吊起的悬浮,在茫茫人海里来回游荡沉浮不定,无法静止,又无法自由行动。奋斗,追求,...
    水墨故事阅读 317评论 0 1
  • 打了六次基础,练兵千日,用兵一时,终于到了用的时候。收到信息是下午两点排舞走流程。因为新增了两支舞蹈,临时要...
    猫眼儿阅读 370评论 0 1