1

我有一个 10 位二进制字符串,我必须在每次迭代时循环移位。我很困惑,迷失了。它背后的逻辑可能是什么?如果它是一个十六进制数,我们可以通过 num>>1 或 num<<1 来完成,但是像“1010101010”这样的字符串应该在我们应用按位移位之前转换为十六进制。我必须循环应用按位移位 10 次。

4

4 回答 4

3

Integer 类中有一些方法可以与二进制字符串相互转换。

    int i = Integer.parseInt("1010101010", 2);
    String shiftedi = Integer.toBinaryString(i<<1);

编辑,虽然上面不是循环的,但您可以使用简单的字符串操作:

String in = "1010101010";
String shifted1 = in.substring(1)+in.substring(0,1);
于 2012-04-24T22:23:59.270 回答
1

假设您正在处理String包含零和一的 a(也称为“二进制字符串”),按位移位很容易。

要“左移”,请在每个“左移”的右端添加一个“0”字符。

要“右移”,事情要复杂一些。假设您总是处理二进制中的“正数”,请为每个“右移”删除右端的一个字符。如果您希望进行“符号扩展右移”,那么您需要检查字符串的长度以查看它是否是 2 补码形式的二进制值的特定编码的“最大长度”,然后您需要删除如果最左边的字符已经是“1”,则最右边的字符和可选的在左边添加一个“1”字符。

现在,由于字符串的长度不受限制(而 WORD 和 DWORD),因此不清楚>>>运算符是否对二进制字符串有意义,或者即使负数的 2 的补码表示对二进制字符串有意义,除非你强加一个“限制”字符串中有效字符的数量。如果您想在两个二进制字符串之间进行任何类型的二进制数学运算,则该限制对于两个二进制字符串必须相同(或对较小的字符串具有提升规则)。

另一种选择是将字符串转换为整数并对整数使用二进制操作。

于 2012-04-24T22:37:35.767 回答
1

一般来说,如果要进行数字运算,最好对数字进行。所以我建议将你的字符串转换为它实际代表的 int (或其他)。然后,如果需要,您可以进行位移,然后返回字符串。

如果您只想进行文本操作,那么您可以使用 StringBuffer 并玩弄字符。

StringBuffer s = new StringBuffer("1010101010");
for(int i=0; i<10; i++) {
    char c = s.charAt(0);
    s.append(c);
    s.deleteCharAt(0);
}
String result = s.toString();

但如果你只是想做数学,那就太丑了

于 2012-04-24T22:06:32.743 回答
0
int bits = Integer.parseInt ("010101010", 2);

将 String 转换为 int。“在我们应用按位移位之前转换为十六进制”是胡说八道 - 抱歉。Hex 只是一种表示 int 的方式(例如)。你移动 int 值,而不是它的表示。

于 2012-04-24T22:26:49.867 回答