位移操作java - 输出为8位而不是9位

时间:2015-04-16 13:24:22

标签: java bitwise-operators bit-shift

所以我执行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”,这会破坏我的其余计算。任何人都知道为什么会这样?所有帮助都提前非常感谢:)

4 个答案:

答案 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;
相关问题