二进制中1的个数

  • 利用(n-1)&n来巧妙计算1的个数

      计算n-1时,如果n的最后一位是0,则会向前一位借位,如果前一位仍是0,则继续向前借位,直到遇到第一个不为0的数,

       xxxx1000

      -             1

       xxxx0111

与后 xxxx0000

将最右边的1变为0;

所以重复计算,循环多少次,就找到了多少个1

 

 

public int getNumber(int n){

        int count = 0;

        while(n!=0){

               ++count;

               n=(n-1)&n;

        }

        return count;

}

posted @ 2019-05-16 19:28  liuliuliud  阅读(88)  评论(0编辑  收藏  举报