剑指Offer面试题:进制中1的个数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/H_Targaryen/article/details/81837803

二进制中1的个数

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

  • 这道题最开始的想法是将十进制转为二进制数 ,然后二进制每移动一位判断是否为1,直到二进制数为0,但是这种情况下对于负数的转换很难处理。
  • 实质上考察的是二进制的位运算
    • 对于二进制数n,n-1与n的与运算会消除n的最右边一位1
    • 这样有多少个1,循环就会执行多少次
  • 这种处理方式将正数、负数的情况统一,非常巧妙
public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while(n != 0){
            count++;
            n = (n-1) & n;
        }
        return count;
    }
}

猜你喜欢

转载自blog.csdn.net/H_Targaryen/article/details/81837803