碰到遇到一个有趣的题,求一个数二进制的表示中1的个数,该题有两种解法,一种是使用短除法将该数直接转化为二进制数,另一种比较巧妙的算法是使用与运算,原理如下图所示
依照此种思入有如下算法
int NumberOf1_Solution3(int i)
{
int count = 0;
while (i>0)
{
++ count;
i = (i - 1) & i;
}
return count;
}
//依照短处法的思路 有如下实现
public static int getOneOfNum(int target) {
StringBuilder stringBuilder = new StringBuilder();
while (target != 0) {
stringBuilder.append(target % 2);
target = target / 2;
}
int count = 0;
for (int i = 0; i < stringBuilder.length(); i++) {
if ('1' == stringBuilder.charAt(i)) {
count++;
}
;
}
return count;
}