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