二进制中1的个数
解法1:数字1向左移动
public static void main(String[] args) {
//java中int是32位
System.out.println("输入数字:");
Scanner sc=new Scanner(System.in);//输入的格式
int n=sc.nextInt();
System.out.println(Integer.toString(n,2));
int c=0;
for(int i=0;i<32;i++) {
//n&1<
解法二:原数向右挪补零
public static void main(String[] args) {
System.out.println("输入数字:");
Scanner sc=new Scanner(System.in);//输入的格式
int n=sc.nextInt();
System.out.println(Integer.toString(n,2));
int c=0;
for(int i=0;i<32;i++) {
//>>>循环右移
if(((n>>>i)&1)==1) {
c++;
}
}
System.out.println("统计1有:"+c);
}
解法3:原数-1
public static void main(String[] args) {
System.out.println("输入数字:");
Scanner sc=new Scanner(System.in);//输入的格式
int n=sc.nextInt();
System.out.println(Integer.toString(n,2));
int c=0;
//n减到0是终止条件
while(n!=0) {
//((n-1)&n)消掉低位的1
n=(n-1)&n;
c++;
}
System.out.println("统计1有:"+c);
}
1.5是不是2的整数次方
public static void main(String[] args) {
System.out.println("输入数字:");
Scanner sc=new Scanner(System.in);//输入的格式
int n=sc.nextInt();
//因为2的整数次方都只含有一个1,所以做一次(n-1)&n消除低位1即可
if(((n-1)&n)==0) {
System.out.println("是");
}
else {
System.out.println("不是");
}
}