2013-09-23 8 views
1

내가 진수있어 내가 수행해야합니다부정과 증가 값이

1) 모든 바이트

2) 그래서 수를

을 부정하려면 1을 추가 부정, 나는이 쓴 :

public string u2_number_plus = "1001"; 
public string u2_number_minus = ""; 

public string binToU2() 
     { 
      int length = u2_number_plus.Length; 
      int temp = 1; 

      //negate all bytes 
      for (int a = 0; a < length; a++) 
      { 
       if (u2_number_plus[a] == '1') 
        u2_number_minus += '0'; 
       else 
        u2_number_minus += '1'; 
      } 

      //add 1 to my new (because negate) number 
      for (int b = length - 1; b >= 0; b--) 
      { 
       if (u2_number_minus[b] == 0 && temp == 1) 
       { 
        u2_number_minus = u2_number_minus.Replace(u2_number_minus[b], '1'); 
        temp = 0; 
       } 
       else if (u2_number_minus[b] == 1 && temp == 1) 
       { 
        u2_number_minus = u2_number_minus.Replace(u2_number_minus[b], '0'); 
        temp = 1; 
       } 
       else 
        break; 
      } 

      return u2_number_minus; 
     } 

내 함수 binToU2()는 부울 값을 반환하지만 값은 증가하지 않습니다. 입력 데이터가 1001이면 0111을 얻지 만 함수는 단지 0110을 반환합니다. 실수 한 부분은 어디입니까?

당신이 u2_number_minus의 확인을 수행하는

답변

1

는 [B] 당신은 '0'에 대해 그것을 비교해야하고 '1'이 아닌 숫자 0과 1

if (u2_number_minus[b] == '0' && temp == 1) 

도 사용하는 또 다른 오류가 of Replace 변경 모두 문자열의 지정된 문자가 발생하지만 지정된 위치의 문자 만 변경하려고합니다. C#에는 replaceAt가 없지만이를 수행하는 도우미 함수를 만들 수 있습니다. Replacing a char at a given index in string?을 참조하십시오. 내가 여기에 존 소총의 코드를 사용 :

public static class ReplaceHelper 
{ 
public static string ReplaceAt(this string input, int index, char newChar) 
    { 
    if (input == null) 
    { 
     throw new ArgumentNullException("input"); 
    } 
    char[] chars = input.ToCharArray(); 
    chars[index] = newChar; 
    return new string(chars); 
    } 
} 

을하고 사용할 라인을 교체 변경 ReplaceAt 예를 들어

u2_number_minus = u2_number_minus.ReplaceAt(b, '1'); 
+0

네 :

BitArray 실제로

은 내가 당신에게 예를 들게 ... 비트를 저장하고 당신에게 배열을 부정하거나 다른 작업을 사용하는 기본 기능을 제공한다 하지만 지금은 함수가 모든 수를 1111로 변환합니다. 논리적 인 실수 나 코드가 아직 충분하지 않습니까? –

+1

코드를 업데이트했습니다. 이제 올바르게 작동합니다. –

+0

감사합니다. 문제가 해결되었습니다. –

-1

정말 어쨌든 당신이 원하는 또는 당신이 필요로하는 곳에,하지만하지 않습니다, 어쩌면 문자열 조작으로 고생하는 대신 BitArray를 사용하려고합니다. , 당신 말이 맞아,

 // define a bit array with length=4 and false as default value for each bit. 
     var bits = new BitArray(4, false); 

     bits.Not(); // negate --> all 4 bits are now true. 

     // your example: 
     bits = new BitArray(new bool[] { true, false, false, true }); 
     // to inverst/negate it 
     bits.Not(); 

     // convert to string: 
     string bitString = string.Empty; 
     foreach (var bit in bits) 
     { 
      bitString += (bool)bit ? "1" : "0"; 
     } 

     Console.WriteLine(bitString); 

     // from string: 
     string longBitString = "01000101001001010100010010010"; 
     var longIntArray = longBitString.ToCharArray().Select(p => p.Equals('0') ? false : true).ToArray(); 
     var longBitArray = new BitArray(longIntArray);