2020蓝桥杯备战–>位运算技巧
题目(2):二进制中1的个数
实现一个函数,输入一个整数,输出该数二进制表示中1的个数
例:9的二进制表示位1001,有2位是1
思路:
有三种方法.
1.运用java中的Integer类将数字转换成二进制字符串,遍历字符串找到字符为1的个数.
2.运用位运算与1<<i相&
3.运用位运算:N&(N-1)运算,计算运算次数,即可得到二进制表示中1的个数.
下面是代码,亲测都通过!
import java.util.Scanner;
public class Main
{
public static void main(String[] ars)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
//第一种方法---不用位运算
String s=Integer.toBinaryString(n);
int count1=0;
for(int i=0;i<s.length();i++)
if(s.charAt(i)=='1')
count1++;
System.out.println(count1);
//第二种方法----位运算1动n不动
int count2=0;
for(int i=0;i<32;i++)
{
if((n&(1<<i))==(1<<i))
count2++;
}
System.out.println(count2);
//第二种方法----位运算1不动n动
int count3=0;
for(int i=0;i<32;i++)
{
if(((n>>i)&1)==1)
count3++;
}
System.out.println(count3);
//第三种方法----自身位运算
int count4=0;
while(n!=0)
{
n=n&(n-1);
count4++;
}
System.out.println(count4);
}
}
扩展题目:一条语句判断整数是不是2的整数次方
if((n&(n-1))==0) System.out.print("yes");