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); } } }
为什么要: int i = Integer.valueOf(str1,2); int j = Integer.valueOf(str2,2); 这样哦,其中 B 就是我从int型转成二进制的哦
System.out.println(result.toString()); 可以直接打出来
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++; } } }
看了API 没有找到 A与B比较 的 函数哦 该怎么用 哦 能否指点一下啊
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);
}
}
}
为什么要:
int i = Integer.valueOf(str1,2);
int j = Integer.valueOf(str2,2);
这样哦,其中 B 就是我从int型转成二进制的哦
可以直接打出来
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++;
}
}
}
得到两个值之后你才可以进行异或运算.然后就是找的问题了.注意了,异或后位数可能少了,因为前面的是0,所以要加一个base值.就是左边少了的位数