Q8--二进制中1的个数

来源:互联网 发布:把高中老师给睡了知乎 编辑:程序博客网 时间:2024/06/06 07:14

一、题目描述

请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2.

二、java代码实现

public class Main {    public static void main(String[] args){        int n = 15;        System.out.println(numberOf1A(n));        System.out.println(numberOf1B(n));        System.out.println(numberOf1C(n));    }    //第一种方法:判断最右边一位是不是1,然后把输入的整数右移一位,循环的次数<=32    public static int numberOf1A(int n){        int count = 0;        while(n!=0){            if((n&1) !=0)                count++;            n = n >>> 1;//注意这里要用无符号右移,最高位补0,如果写成>>,当n为负数的时候会导致死循环        }        return count;    }    //第二种方法:设一个flag,循环的次数等于整数二进制的位数,32位的整数需要循环32次    public static int numberOf1B(int n){        int count = 0;        int flag = 1;        while(flag != 0){            if((n & flag) != 0)                count++;            flag = flag << 1;        }        return count;    }    //第三种方法:n&(n-1)会把最右边的1置为0,这个操作有多少次代表有多少个1,循环的次数是1的个数    public static int numberOf1C(int n){        int count = 0;        while(n!=0)        {            ++ count;            n = n & (n-1);        }        return count;    }}
0 0