[英]Bitwise not operation on a string of bits
我有一個值為0111000000
的字符串。 如何對此字符串執行按位運算?
如果我將它轉換為整數,使用~
運算符並將其轉換回二進制字符串,結果字符串有額外的位。 我希望輸出正好是1000111111
。
以下代碼工作正常,但它不是一個好方法。 還有另一種更好的方法嗎?
String bstr="";
while(m!=str.length())
{
char a=str.charAt(m);
if(a=='1')
{
a='0';
bstr=bstr+a;
m++;
}
else
{
a='1';
bstr=bstr+a;
m++;
}
}
嘗試這個
char[] a = s.toCharArray();
for(int i = 0; i < a.length; i++) {
a[i] = a[i]=='0' ? '1' : '0';
}
s = new String(a);
這也行得很好
int i = ~Integer.parseInt(s, 2);
String tmp = Integer.toBinaryString(i);
s = tmp.substring(tmp.length()- s.length());
跟蹤位串中的位數。 轉換為整數並使用~value
操作翻轉位后,使用位掩碼刪除不需要的1
個高端位。
比如說你的位串有一個固定的10位。 然后,您可以使用: value & 0x2ff
屏蔽不需要的高端位。
如果位串中的位數是可變的:
value & ((1 << nBits) - 1)
來自common-lang的StringUtils.replaceChars
可能會有所幫助:
StringUtils.replaceChars("0111000000", "01", "10");
您應該使用字符串構建器,這樣您就可以更改單個位而無需創建許多垃圾字符串。 您也可以使用XOR翻轉單個位:
b ^= 1;
哪個適用於數字的二進制和ASCII值。
也許這會奏效:
String result = Integer.toBinaryString(~(Integer.parseInt("0111000000",2)));
將二進制String轉換為int,使用按位非運算符反轉,然后轉換回二進制字符串。
您可以使用XOR
操作執行此操作
public String xorOperation(String value) {
String str1 = value;
long l = Long.parseLong(str1, 2);
String str2 = "";
for (int i = 0; i < str1.length(); i++) {
str2 = str2 + "1";
}
long n = Long.parseLong(str2, 2);
long num = l ^ n;
String bininaryString = Long.toBinaryString(num);
System.out.println(bininaryString);
return bininaryString;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.