A:100011110101101011110000B:101011110001011011110000如何快速输出B与A不相同的位的索引值???
谢谢咯

解决方案 »

  1.   


    看了API 没有找到  A与B比较 的 函数哦 该怎么用 哦  能否指点一下啊 
      

  2.   

    先做或运算,然后转成字符串,index一下之类的就出来了
      

  3.   

    本帖最后由 AWUSOFT 于 2010-04-16 11:17:43 编辑
      

  4.   


    import java.util.BitSet;public class BitSetTest {

    public BitSet initBitSet(String bitStr) {
    if (null == bitStr) {
    return null;
    }

    BitSet bs = new BitSet(bitStr.length());
    for (int i = 0; i < bitStr.length(); i++) {
    char c = bitStr.charAt(i);
    if ('1' == c) {
    bs.set(i);
    } else if ('0' == c) {
    bs.set(i, false);
    }
    }

    return bs;
    }

    public BitSet check(String a, String b) {
    BitSet bsa = initBitSet(a);
    BitSet bsb = initBitSet(b);
    bsa.xor(bsb);
    return bsa;
    }

    public static void main(String[] args) {
    String a = "100011110101101011110000";
    String b = "101011110001011011110000";

    BitSetTest bst = new BitSetTest();
    BitSet result = bst.check(a, b);
    for (int i = 0; i < result.length(); i++) {
    if (result.get(i))
    System.out.println(i);
    }
    }
    }
      

  5.   


    为什么要:
    int i = Integer.valueOf(str1,2);
    int j = Integer.valueOf(str2,2);
    这样哦,其中 B 就是我从int型转成二进制的哦  
      

  6.   

    System.out.println(result.toString());
    可以直接打出来
      

  7.   

    public class Test {    public static void main(String args[]) {
            long a = 0x8f5af0L; // 1000 1111 0101 1010 1111 0000
            long b = 0xaf16f0L; // 1010 1111 0001 0110 1111 0000
            long c = a ^ b;
            int k = 0;
            while(c != 0) {
                if((c & 0x1) == 1) {
                    System.out.println("低 " + k + " 位不同");
                }
                c >>>= 1;
                k++;
            }
        }
    }
      

  8.   

    异或的算法就是位不同的时候是1,怎么样一个字符串变成数值,因为要计算,就使用Integer的valueOf嘛,因为你的是二进制字符串,所以参数是2.
    得到两个值之后你才可以进行异或运算.然后就是找的问题了.注意了,异或后位数可能少了,因为前面的是0,所以要加一个base值.就是左边少了的位数