二进制中1的个数

elements of programming interviews in java第25页举了一个关于计算int类型在二进制下1的个数的问题,这里根据书上的方法写了代码,没有做过多少测试用例,只能说理论上应该是对的

问题描述

给定一个int类型数字x,计算其在二进制下1的个数

方案1

使用1作为掩码进行 and 运算,每次运算后将x进行右移操作

public int mehtod_1(int x){
        int mask_num=1;
        int count=0;
        for(int i=0;i<32;i++){
            if((x&mask_num)!=0){
                count++;
            }
            x>>>=1;
        }
        return count;
    }

书中给出的代码如下,更好些

public static short countBitsCint x) { 
		short numBits = 0;
		while (x != 0) {
        numBits += (x & 1);
        	X »>= 1; 
        }
		return numBits; 
 	}

方案2

每次使用x和x-1进行 and 运算,此时会去掉最右边的1,直到x等于0结束
理解:当x-1时,最右边1变为0且其右边均为1,如100变为011,此时再与原数 and 运算必然全部设为0

public int mehtod_2(int x){
        int count=0;
        while(x!=0){
            x=x&(x-1);
            count++;
        }
        return count;
    }

注:
使用>>>为无符号右移
使用>> 为有符号右移
这一篇笔记主要还是用来熟悉下java里的按位操作,以后忘了可以来看看~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值