所以我执行java位移然后执行XOR,但是我的字符串上的位移返回9位而不是8位的字符串。
int temp = Integer.parseInt(binary, 2);
String shift = String.format("%8s", Integer.toBinaryString(temp << 1)).replace(' ', '0');
int sum = Integer.parseInt(shiftedInput) ^ Integer.parseInt(xorConstant);
在上面的代码中,二进制是一个字符串,它是“10000011”,所以8位长。 因此temp变为值为131的int,但是shift的值为“100000110”,这会破坏我的其余计算。任何人都知道为什么会这样?所有帮助都提前非常感谢:)
答案 0 :(得分:1)
由于Java中的Integer有32位(4Byte),您的移位将返回一个整数,其二进制值为00... 0001 0000 0110
,如您所知。
要删除不需要的24位,可以使用and
运算符。
((temp << 1) & 0xff)
返回您期望的结果
temp: 0000 0000 0000 0000 0000 0001 0000 0110
and 0xff: 0000 0000 0000 0000 0000 0000 1111 1111
result: 0000 0000 0000 0000 0000 0000 0000 0110
答案 1 :(得分:1)
使用字节而不是int。
一个字节是8位。 int是32。
byte temp = Byte.parseByte(binary, 2);
等
你也可能需要在轮班时施展。
(byte)(temp << 1)
答案 2 :(得分:0)
确保您的结果仅限于8位,否则int类型的所有32位都是合理的游戏:
int temp = Integer.parseInt(binary, 2);
String shift = String.format("%8s", Integer.toBinaryString((temp << 1) & 0xFF)).replace(' ', '0');
int sum = Integer.parseInt(shiftedInput) ^ Integer.parseInt(xorConstant);
答案 3 :(得分:0)
为什么要涉及字符串格式?仅仅因为你的输入是字符串并不意味着你需要一直坚持下去。只需将它们立即转换为int并完成它:
int bin = Integer.parseInt(binary, 2);
int xor = Integer.parseInt(xorConstant);
int sum = (bin << 1) ^ xor;