您的位置:首页 > 职场人生

剑指offer面试题10 二进制中1的个数 java实现

2017-08-14 19:21 447 查看
解题思路:

常规的思路可能是将一个数n和1做按位与(&)运算,若结果为1,则证明n的二进制表示中末位为1,计此时符合题目条件,计数器加1,然后将n用n/2赋值,继续上述过程。但该方法有个问题,针对负数,由于负数在计算机中是以补码的形式存储,所以对于负数不能用这种方法。可以换个思路。保持n不变,设置一个flag,flag从1开始,令n与flag做按位与运算,若为1则计数器加1。然后另flag左移一位,继续上述过程。

public class Solution {

public int NumberOf1(int n) {

int count = 0;
int flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
// 证明此时n的与flag相与得1的那一位为1
count++;
}
// 将flag左移一位,相当于乘以2
flag = flag << 1;
}

return count;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息