测试一个& b == 0

时间:2010-06-21 05:19:57

标签: java bit-manipulation

我想实现一个测试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));
    }
}

适用于较小的值。大数字也是正确的吗?

1 个答案:

答案 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));
  }

}