如何在java中按位移位二进制字符串?

时间:2012-04-24 22:00:03

标签: java binary hex bit-manipulation

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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();

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

答案 2 :(得分:1)

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

要“向左移动”,请为每个“左移”在右端添加“0”字符。

为了“向右移”,事情有点复杂。假设您总是使用二进制处理“正数”,请在每个“右移”中删除右端的字符。如果你想做一个“符号扩展右移”,那么你需要检查字符串的长度,看看它是否是2的补码形式的二进制值的特定编码的“最大长度”,那么你需要删除最右边的字符,并且可选择在左边添加“1”字符,前提是最左边的字符已经是“1”。

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

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

答案 3 :(得分:0)

int bits = Integer.parseInt ("010101010", 2);

将String转换为int。 “在我们应用按位移位之前转换为十六进制”是无稽之谈 - 对不起。 Hex只是表示int的一种方式(例如)。你移动了int值,而不是它的表示。