Xor从重要位开始

时间:2014-03-20 17:23:05

标签: java bit-manipulation xor bits

int a= 21;//10101
int b = 269;//100001101

a^b会做

    10101
100001101
---------
100011000

但我想做

10101
100001101
---------
001011101

有没有办法在不改变原始数字的情况下这样做?

2 个答案:

答案 0 :(得分:5)

您可以将a转换为与左侧的b对齐。下面的示例代码适用于您的示例,但不能正确处理溢出等。它应该为您提供一个起点。

int a = 21;
int b = 269;

int shift = Integer.numberOfLeadingZeros(a) - Integer.numberOfLeadingZeros(b);

int c = (a << shift) ^ b;
System.out.println(Integer.toBinaryString(c)); // 1011101

答案 1 :(得分:1)

您可以在a上使用左移位,这会将0添加到a的末尾,这不会更改XOR的值:

//Calculate how far to shift
int shiftLength = Integer.toBinaryString(b).length() - Integer.toBinaryString(a).length();

//Apply shift
int aShited = a << shiftLength;

//Execute
System.out.println(Integer.toBinaryString(aShifted^b));