Leetcode剑指offer 15 二进制中1的个数

package jianzhioffer;

import java.util.Stack;

/**
 * 统计二进制数中1的个数 有三种方法
 */
public class Q15 {
    public int hammingWeight1(int n) {
        return Integer.bitCount(n);//java的Integer中又一个计数函数,能返回该int型变量二进制形式中的1个数

    }

    public int hammingWeight2(int n) {
        //&操作就是二进制形式下两个数都为1的位保留,其他都为0,
        // 所以n每次和(n-1)进行&操作便可以少一个1,这样直到==0,便可以统计1的个数,只适用于正数
        int count = 0;
        while (n != 0) {
            count++;
            n = n & (n - 1);

        }
        return count;

    }
    public int hammingWeight3(int n) {
        int count = 0;
        while (n != 0) {
            if((n&1)!=0){//正数右移的过程中,先判断最右边一位是否是1,如果是就count++,然后右移,这样便可以统计1的个数
                //但是负数由于右移过程中是最左边补1,所以不适用于负数
                count++;
            }
            n =n>>1;

        }
        return count;

    }



    public static void main(String argc[]) {
        System.out.print(new Q15().hammingWeight2(-14));

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值