求二进制中1的个数《编程之美》java(jdk1.6)实现

package com.ht.msra;

/**
* Created by IntelliJ IDEA.
* Desc:对于一个字节(8bit)的无符号整形变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能的高
* From:《编程之美》 p119
* Date: 2009-10-27
* Time: 9:38:13
*/
public class OneCountInBinary {
    /**
     * 解法1:通过除2和取余的方法,循环变量得到最终1的数量
     * */
    public static Integer get1CountByMod2(Byte b) {
        int num =0;
        while(b>0) {
            if(((byte)(b%2))==1) {
                num ++;
            }
            b = (byte)(b/2);
        }
        return num;
    }
    /**
     * 解法2:通过与1和右移的方法,循环变量得到最终1的数量
     * */
    public static Integer get1CountByShift(Byte b) {
        int num =0;
        while(b>0) {
            num += b & 0x01;
            b = (byte)(b>>1);
        }
        return num;
    }

    /**
     * 解法3:通过与上变量减1的方法,循环变量得到最终1的数量
     * */
    public static Integer get1CountByAndMinus1(Byte b) {
        int num =0;
        while(b>0) {
            b = (byte)(b & (b-1));
            num++;
        }
        return num;
    }

/**
     * int
     * */

  public static int getCount(int b){
    int num =0;
       while(b>0) {
           num += b & 1;
           b = b>>1;
       }
       return num;
   }



    public static void main(String[] args) {
        Byte b = 22;

System.out.println(""+Integer.toBinaryString(b));
       System.out.println("解法1:"+get1CountByMod2(b));
       System.out.println("解法2:"+get1CountByShift(b));
       System.out.println("解法3:"+get1CountByAndMinus1(b));
       System.out.println("解法4:"+getCount(b));

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值