首页 > 其他 > 详细

二进制中1的个数 --剑指offer

时间:2020-03-05 10:40:54      阅读:60      评论:0      收藏:0      [点我收藏+]

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

最开始想 和1做与运算 然后位右移 没有通过测试 是因为负数位右移用1来补位,导致判断没法终止。所以换一种方法

还是和1做与运算,但是1位左移,一直到1位左移变成0为止,如果位运算结果不是0,计算结果?1;

public class Solution {
    public int NumberOf1(int n) {
        int base = 1;
        int sum=0;
        while(base != 0){
            if((n&base) != 0){
                sum ++;
            }
            base=base << 1;
        }
        return sum;
    }
}

记录一种网上方法:

把n减1然后和原先的n进行与运算,运算结果不为0说明有一个位为1,循环往复

例:n的二进制表示为 1110 减1后为 1101 然后1110和1101进行与运算结果为1100 一次运算可以说明有一个1 ,这样下去就可以找到所有的1;

public class Solution {
    public int NumberOf1(int n) {
        int count=0;
//只要n不为0,就说明有一个位为1
while(n!=0){ count ++; n = n&(n-1); } return count; } }

 

二进制中1的个数 --剑指offer

原文:https://www.cnblogs.com/nlw-blog/p/12417794.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!