public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0){
count++;
n=n&(n-1);
}
return count;
}
}
二进制中1的个数,原理是只要数字为非0的,那么就含有1,n&(n-1)能消除n中最低位的1,循环一下就出结果了,值得注意的是负数的情况,负数的时候计算机中存储是存的是补码,这时候仍然用这种方法恰好也能得到1的个数,可自行验证。
本文介绍了一种高效算法,用于计算任意整数(包括负数)二进制表示中1的个数。核心思想是通过位运算n&(n-1)消除最低位的1,循环此操作直至n为0。该方法不仅适用于正数,对于负数的补码表示同样有效。
651

被折叠的 条评论
为什么被折叠?



