剑指Offer: 二进制中1的个数 (java代码实现)

题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

思路一
每次和自己少一位的数相与 每次相与 都可以去掉一个1

思路二
每次和1相与 得到最后一位数 要么是0要么是1 直接加入结果
然后右移一位 继续得到下一个最后一位数

注意是无符号右移

 public class Offer11 {
        public int NumberOf1(int n) {
            int res = 0;
            while(n != 0) {
                n &= (n-1);
                res++;
            }
            return res;
    //思路二
    //        int res = 0;
    //        while(n != 0) {
    //            res  += n & 1;
    //            n >>>=1;
    //        }
    //        return res;
        }

}

猜你喜欢

转载自blog.csdn.net/wmh1152151276/article/details/88043035