簡體   English   中英

按位不對一串位操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM