码迷,mamicode.com
首页 > 其他好文 > 详细

201. Bitwise AND of Numbers Range

时间:2018-10-19 20:50:23      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:its   分享图片   解答   技术分享   分享   and   while   范围   不同的   

一、题目

  1、审题

  技术分享图片

  2、分析

    求 n~m 范围内的所有数字进行二进制 & 运算后的结果。

 

二、解答

  1、思路:

    方法一、

    以 26~30 为例,二级制 & 运算,若出现了一个 0 则结果为 0。在这个例子中,结果为 11000,因此我们要减去后边部分不同的部分。这里后边有 3 个不同。

    技术分享图片

    public int rangeBitwiseAnd2(int m, int n) {
        int i = 0; // i means we have how many bits are 0 on the right
        while(m != n){
            m >>= 1;
            n >>= 1;
            i++;  
          }  
      return m << i;      
    }

 

  方法二、

    直接统计 m、n 共同前缀。后边部分置为 0。

public int rangeBitwiseAnd(int m, int n) {
        return (n > m) ? (rangeBitwiseAnd(m >> 1, n >> 1) << 1) : m;
    }

 

  方法三、

    每次将 n 的最右边的 1 化为 0,直到 m >= n,则 n 即为 答案。

    public int rangeBitwiseAnd3(int m, int n) {
        while(m < n)
            n = n & (n - 1); // 每次将 n 最右边一个 1 去除
        return n;
    }

 

201. Bitwise AND of Numbers Range

标签:its   分享图片   解答   技术分享   分享   and   while   范围   不同的   

原文地址:https://www.cnblogs.com/skillking/p/9818584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!