我想实现一个测试a& b == 0的程序。如果两个整数在同一位置至少有1位,则返回false;如果在不同位置有1位,则返回true。
这是我的代码:
import java.util.*;
public class btest{
public static boolean testand(int a,int b){
int i=0;
int k=0;
int m=0;
while(i<32){
k= (a>>i) &1;
m=(b>>i) &1;
if (k==1 && m==1){
System.out.println("they have bit 1 in common at position:"+i);
return false;
}
i++;
}
System.out.println(" a & b is equal :" + (a &b));
return true;
}
public static void main(String[]args){
Scanner scnr=new Scanner(System.in);
int a=scnr.nextInt();
int b=scnr.nextInt();
System.out.println(testand(a,b));
}
}
适用于较小的值。大数字也是正确的吗?
答案 0 :(得分:3)
是的,它至少可以用于最多30位的数字。最后一位是符号位,因此您应该检查它是否也适用于该位。您可能必须输入负数才能获得第31位设置的整数。
我重新格式化了代码,更改了一些变量名称,并将while
循环更改为for
循环:
import java.util.*;
public class btest{
public static boolean TestAnd(int a, int b) {
for (int i = 0, i < 32, i++) {
int aBit = (a >> i) & 1;
int bBit = (b >> i) & 1;
if (aBit == 1 && bBit == 1) {
System.out.println("they have bit 1 in common at position:" + i);
return false;
}
}
System.out.println(" a & b is equal :" + (a & b));
return true;
}
public static void main(String[] args) {
Scanner scnr=new Scanner(System.in);
int a = scnr.nextInt();
int b = scnr.nextInt();
System.out.println(TestAnd(a, b));
}
}