zoukankan      html  css  js  c++  java
  • 201. 数字范围按位与

    class Solution {
        public int rangeBitwiseAnd(int m, int n) {
            // 1.如果m与n二进制位数不同的话 由m到n每一位二进制位都出现过0,这里可以解释为:
            //由低位向高位进位时,低位会出现0,位数少的数所有位都会出现0 
            //比如从所有的三位二进制数如111或110或100到1111 一定会出现1000的情况
            //只要这一位出现过0,那么按位与的二进制结果中这一位必然为0,
            //所以位数不同的话,每位都出现过0,结果为0。
            // 2.如果m与n二进制位数相同的话,二进制位从高位到低位必然会有一段公共前缀,而m与n之间的数
            //也必然有相同的公共前缀,只有后面的二进制位不同,且每位必会出现0
            //所以最后的结果中后面位数全部为0,所以将m,n同时右移
            //移到公共前缀部分的时候 m n相同,然后再将后面的0补上,右移多少次就将它左移多少次就可以了
            if(m == 0 || m == n) return m;
            int num = 0;
            while(m != n) { // 二进制位不同的情况下,只有移动到0,它两才会相等退出,0右移结果还是0
                m >>= 1;
                n >>= 1;
                num++;
            }  
            return m << num;
        }
    }
  • 相关阅读:
    ural 1723 Sandro's Book
    ural 1104 Don’t Ask Woman about Her Age
    ural 1052 Rabbit Hunt
    ural 1837 Isenbaev's Number
    ural 1348 Goat in the Garden 2
    ural 1207 Median on the Plane
    ural 1640 Circle of Winter
    段错误 核心已转储尝试解决
    显卡相关命令介绍【转载】
    Linux的top命令学习【转载】
  • 原文地址:https://www.cnblogs.com/yonezu/p/13453455.html
Copyright © 2011-2022 走看看