2017-03-04 5 views
1

Android/Javaで16進数の2の補数を計算する方法。Javaで2進数の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'; 
    } 

しかし、私はその2の補数を取得することはできませんよ。

+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(2進論理で)を加えます。だからすでに持っている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の補数を最初に見つけることなく、元のバイナリ文字列を逆方向に移動します。 – BackSlash

関連する問題