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

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

刚刚讲完 ^异或,我们接下来来看相与
相与的规则就是:全1为1,不同为0
运算规则:0&0=0;0&1=0;1&0=0;1&1=1;
但我们需要理解的是,通常我们两个变量进行相与的时候使用它们的二进制进行相与,java中 int 类型占4个字节,一个字节是8位,所以一个int 类型是32位。
关于位运算不太清楚的,请百度一下,做个记录,能够大概理解即可

//方法1 这里直接是实现部分,小伙伴们自取,注意粘贴时括号问题
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a=scanner.nextInt();
        int count=0;
        for (int i = 0; i <32; i++) {
        //这里不清楚 << 和 >>的小伙伴,请自行百度
        而且这步比较巧妙,理解起来需要动笔自己算算想一想
            if ((a & (1 << i)) == (1 << i)) {
                count++;
            }
        }
        System.out.println(a+" 里面1的个数有"+count+"个");
    }
}
//方法二
较于方法一比较好理解
public class xiangyu {
	public static int findNumOfOne(int a) {
		int count = 0;//用来记录1的个数
		while(a != 0) {
			count++;
			a = (a -1)&a;//利用相与的性质做掉1
		}
		return count;
	}
	//测试例子
public static void main(String[] args) {
	int b = 9;
	System.out.println(findNumOfOne(b));
}
}

大佬又给我分享了一个小技巧,就是如何快速判断一个数是不是2的整数次幂:

//需要小伙伴们自己提笔算一算
比如8化成二进制位 1000B
			  &0001B
			   0000 = 0
这也可能成为一个小知识点,这些东西就是你不知道的时候,
苦思冥想想不到,一知道就立刻明白,所以需要慢慢积累,多开阔眼界
public static boolean isPowerOf2(int num) {
    return (num & num - 1) == 0;
}

关于更详细的相关链接:
https://www.cnblogs.com/alimayun/p/12786347.html
也建议大家多去网上找一找相关知识学习。

你可能感兴趣的:(基本逻辑运算符的使用,java)