需求:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
分析:
首先,输入的是一个整数,我们需要知道它的二进制,进而判断它二进制中的1的个数。
输出二进制的方法有三种:
-
第一种:除基倒取余法
这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数。
-
第二种:利用“移位”操作实现
利用移位操作对一个十进制数进行移位操作,即:将最高位的数移至最低位(移31位),除过最低位其余位置清零,使用& 操作,可以使用和1相与(&),由于1在内存中除过最低位是1,其余31位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 。
-
第三种:调用API函数
Integer.toBinaryString(n)这是处理问题更符合面向对象的一种方式
这里我们可以直接用与逻辑来执行,因为与的结果是不为0就证明还有1,否则没有。
import java.util.Scanner;
public class 按位与 {
public static int NumberOf1(int n) {
int count = 0;
while (n != 0) {
count++;
n = (n - 1) & n;
}
return count;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = s.nextInt();
NumberOf1(n);
System.out.println("总的个数为:");
System.out.println(NumberOf1(n));
}
}
执行程序:
请输入一个整数:
-5
总的个数为:
31