目录
题一:找出二进制序列中数字1的个数
方法一:目标数字向右移,一直移到最高位
public class Test {
public static void main1(String[] args) {
int num = 7;
int count = 0;
int n = 0;
while(n < 32){
if(((num >> n) & 1) == 1){
count++;
}
n++;
}
System.out.println(count);
}
}
方法二:目标数字向右移,一直移到无效位
解法与方法一一致,但方法一对于任何数都要右移32位,效率较低,方法二可以只计算有效位。
public class Test {
public static void main2(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int num = sc.nextInt();
int count = 0;
while(num != 0){
if((num & 1) != 0){
count++;
}
num = num >> 1;
}
System.out.println(count);
}
sc.close();
}
}
方法三:相邻数字按位与,一直算到为 0 止
一直和相邻的数字运算,最终会得到0,算了几次就有几个1。
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int num = sc.nextInt();
int count = 0;
while(num != 0){
num = num & (num - 1);
count++;
}
System.out.println(count);
}
sc.close();
}
}
题二:输出二进制序列中偶数位与奇数位
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n =0;
while(sc.hasNextInt()){
int num = sc.nextInt();
//偶数位
System.out.print("偶数位:");
for (n = 30; n >= 0; n -= 2) {
System.out.print((num >> n) & 1);
}
System.out.println();
//奇数位
System.out.print("奇数位:");
for (n = 31; n >= 1 ; n-= 2) {
System.out.print((num >> n) & 1);
}
System.out.println();
}
}