题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
##题目分析
利用位运算的右移,可以不断将最右边的二进制位挤掉,使得从右到左的每一位都可以当做最后一位,其与1相与,若为1,则当前二进制位为1,则计数+1;
eg:3的二进制为0011;初始化cnt=0(1的个数)
- 0011(x = 4) 与1(0001)相与,等于1 ,即得最后一位为1,cnt+1;
- 将0011右移1位(x >> 1)得到001,与1(0001)相与,等于1,即得当前最后一位的实际的倒数第二位为1,cnt++;
- 将将0011右移2位(x >> 2)得到00,与1(0001)相与,等于0,即得当前最后一位的实际的倒数第三位为0;
- 将0011右移3位(x >> 3)得到0,与1(0001)相与,等于0,即得当前最后一位的实际的倒数第四位为0;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
int cnt = 0;
for(int i = 0; i < 32; i++){
if(((x >> i) & 1) == 1){
cnt++;
}
}
System.out.println(cnt);
}
}