位移位操作 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;
所以我正在执行 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;