整数的二进制数中1的个数

求出一个整数的二进制含1的个数

function f(i) {
    
    
    var j = 0;
    while (i > 0) {
    
    
        i = i & (i - 1);
        j++;
    }
    return j;
}

在这里插入图片描述

原理:

0b111111111 === 511 // true
2**8 + 2**7 + 2**6 + 2**5 + 2**4 + 2**3 + 2**2 + 2**1 + 2**0 // 511
0b111111110 === 510 // true
2**8 + 2**7 + 2**6 + 2**5 + 2**4 + 2**3 + 2**2 + 2**1 // 510

511 & 510 === 0b111111111 & 0b111111110
// => 2**8 + 2**7 + 2**6 + 2**5 + 2**4 + 2**3 + 2**2 + 2**1  这里消灭了一个1

510 & 509 === 0b111111110 & 0b111111101
// => 2**8 + 2**7 + 2**6 + 2**5 + 2**4 + 2**3 + 2**2  这里消灭了一个1

// ....依次类推

猜你喜欢

转载自blog.csdn.net/formylovetm/article/details/126351405