2017-03-04 154 views
1

如何在Android/Java中計算2的十六進制數的補碼。如何以編程方式獲得二進制數的二進制補碼

For Example : 
    String x = 10011010; 
    1's complement of x = 01100101; 
    2's complement is 01100110; 

如何在Java中進行編程實現?

我試過下面的代碼的二進制轉換爲其1的恭維:

public String complementFunction(String bin) { 
     String ones = ""; 

     for (int i = 0; i < bin.length(); i++) { 
      ones += flip(bin.charAt(i)); 
     } 
     return ones; 
    } 

// Returns '0' for '1' and '1' for '0' 
    public char flip(char c) { 
     return (c == '0') ? '1' : '0'; 
    } 

但我無法得到它的二進制補碼。

+0

你知道背後的理論嗎?如果你知道理論,實施它是一件容易的事。你試過什麼了? – BackSlash

+0

這可能是純Java的。它對於Android來說具體如何? –

+0

@BackSlash我發佈了我的代碼以獲得1的補碼。 –

回答

2

感謝您的幫助大家。 我得到了解決,它是如下:

public String twosCompliment(String bin) { 
     String twos = "", ones = ""; 

     for (int i = 0; i < bin.length(); i++) { 
      ones += flip(bin.charAt(i)); 
     } 
     int number0 = Integer.parseInt(ones, 2); 
     StringBuilder builder = new StringBuilder(ones); 
     boolean b = false; 
     for (int i = ones.length() - 1; i > 0; i--) { 
      if (ones.charAt(i) == '1') { 
       builder.setCharAt(i, '0'); 
      } else { 
       builder.setCharAt(i, '1'); 
       b = true; 
       break; 
      } 
     } 
     if (!b) 
      builder.append("1", 0, 7); 

     twos = builder.toString(); 

     return twos; 
    } 

// Returns '0' for '1' and '1' for '0' 
    public char flip(char c) { 
     return (c == '0') ? '1' : '0'; 
    } 

感謝所有幫助。

1

This wikipedia section解釋了一個簡單的方法來獲得2的補碼:獲得1的補碼,然後加1(二進制邏輯)。所以你可以使用你已經有的complementFunction,然後向後通過字符串。如果找到1,請翻轉並繼續。如果您發現0,請翻轉並停止。

String twos = ""; 
for (int i = bin.length() - 1; i >= 0; i--) { 
    if (bin.charAt(i) == '1') { 
     twos = "0" + twos; 
    } else { 
     twos = bin.substring(0, i) + "1" + two; 
     break; 
    } 
    twos = flip(bin.charAt(i)); 
} 
return twos; 
+0

另外,沒有找到1的補碼第一:經過原始二進制字符串倒退,如果你發現1後1翻轉所有其他數字1。 – BackSlash