/**
* 1 通过 & 运算得到最后一位 是1还是0
* 2 >>> 运算将二进制整体往后移动
* 下一次循环将得到第二位 是1还是0
* 比如:-1:1111 ··· 1111 这是-1的补码
* 1111 ··· 1111 & 0000 ··· 0001(0X00000001)= 1 得到最后一位是1
* 然后无符号右移1位 0111 ··· 1111 重复上两步操作
* 32次后就能得到结果
*
* @author hello-piper
*/
private static int NumberOf1(int n) {
int result = 0;
for (int i = 0; i < 32; i++) {
result += n & 0x00000001;
n = n >>> 1;
}
return result;
}
京公网安备 11010502036488号