2017-03-04 15 views
1

Android/Java에서 16 진수의 2의 보수를 계산하는 방법. 나는 프로 문법적으로 자바에서 달성 할 수자바에서 이진수의 2의 보수를 프로그래밍 방식으로 얻는 법

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

어떻게?

나는 그 일의 칭찬에 바이너리로 변환하려면 다음 코드를 시도했다 :

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

이것은 아마도 순수 자바 .. 어떻게 안드로이드에 특정 무엇입니까? –

+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의 보수를 먼저 찾지 않고 원래의 이진 문자열을 뒤쪽으로 이동합니다. – BackSlash