位运算
package com.cloud.algorithm.demo;
import org.junit.Test;
/**
* DATE: 2021/4/15
* Author: xiaoqu
* Version: 1.0.0
* 位运算
*/
public class Topic15 {
/**
* 位运算
* 二进制中1的个数
* 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
* 例如,把9表示成二进制是1001,有2位是1,因此,如果输入9,则该函数输出2.
*/
@Test
public void topic15_1() {
//解法一:可以把二进制向后移,如果遇到1则数量加1 这种方法只适用于正数,负数的第一位为1,右移不会改变,会陷入死循环
//解法二; 整数减1 再和原整数做与运算,会把该整数最右边的1变成0,那么一个整数的二进制中有多少个1,就可以进行多少次这样的运算
int i = this.demo01(3);
System.out.println(i);
}
private int demo01(int num) {
int i = 0;
while (num != 0) {
num = (num - 1) & num;
i++;
}
return i;
}
}