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

Bit Shift operation java - outputs to 8 bits instead of 9

所以我正在执行 java 位移,然后执行 XOR 然而,我的字符串上的位移 returns 是 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”,这破坏了我其余的计算。有人知道这是为什么吗?提前非常感谢所有帮助:)

只要确保你的结果限制在 8 位,否则所有 32 位的 int 类型都是公平的:

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);

由于 Java 中的整数有 32 位(4 字节),您的移位将 return 二进制值为 00... 0001 0000 0110 的整数,正如您已经知道的那样。

要删除不需要的 24 位,可以使用 and 运算符。

((temp << 1) & 0xff)

哪个return是您期望的结果

       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

使用字节而不是整数。

一个字节是8位。 一个int是32.

    byte temp = Byte.parseByte(binary, 2);

等等

您可能也需要在轮班时施法。

(byte)(temp << 1)

为什么要涉及字符串格式化?仅仅因为您的输入是字符串并不意味着您需要一直坚持下去。立即将它们转换为整数并完成:

int bin = Integer.parseInt(binary, 2);
int xor = Integer.parseInt(xorConstant);
int sum = (bin << 1) ^ xor;