判断二进制数中1的个数

法1:最优解:

每一个二进制-1以后,从右往下左第一个1的后面的数都会变为1,然后与原二进制数与以后后面就都会变为0,能这样操作几次就代表有几个1

1100-1=1011

public int NumberOf1(int n) {
        int count = 0;
        while(n!= 0){
            count++;
            n = n & (n - 1);
}
       

法2:

private static int NumberOf1_low(int n) {
        int count = 0;
        int flag = 1;
        while (flag != 0) {
            if ((n & flag) != 0) {
                count++;
            }
            flag = flag << 1;
        }
        return count;
    }

 

posted @ 2019-07-18 11:38  LeeJuly  阅读(740)  评论(0)    收藏  举报