int a= 21;//10101
int b = 269;//100001101
a^b
会做
10101
100001101
---------
100011000
但我想做
10101
100001101
---------
001011101
有没有办法在不改变原始数字的情况下这样做?
答案 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));