2014-02-05 31 views
1

看twit.tv節目編碼101(第2集)時,我遇到了這個問題。代碼是預先寫好的,但我們被要求改變它以打印出將整數轉換爲二進制數的while循環的所有值。C#如何刪除0領先的32位從INT

我能夠打印出一個簡單的一切「Console.WriteLine(號);」線。這樣做時,它將返回包含的32位int 0的所有值。

我的問題,是有沒有辦法修剪或去除所有多餘的0在循環的劃分(不是在最後的二進制數),所以他們不打印?下面是該程序的代碼:

public static string ConvertIntToBinary(int number) 
{ 
    int bits = (sizeof(int) * 16); //32bits 
    char[] result = new char[bits]; //Array to hold the binary numbers http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx 

    while (bits > 0) 
    { 
     bits = bits - 1; 
     int remainder = number % 2; //% called mod or modulo which computes the remainder after dividing http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx 

     if (remainder == 1) //If remainder is 1, store it as 1 
      result[bits] = '1'; 
     else 
      result[bits] = '0'; //Otherwise store it as 0 

     number = number/2; //Take the original number, divide it by 2 
     Console.WriteLine(number); 
    } 
    return new string(result).TrimStart('0'); //return the result as a string ,removing extra 0's 
} 
+1

'C#如何從32位int中刪除前導0' - 'int'沒有任何前導零。這只是一個整數值。 –

+2

@HighCore你看過實際的問題還是隻看標題? – Andy

+0

@只是標題。這就是我一直在做的事情。我懶得想看看他的防守,其餘 –

回答

0

終止循環時number達到0。在這一點上有沒有更多的非零位的決絕:

public static string ConvertIntToBinary(uint value) 
{ 
    int totalbits = sizeof(int) * 8; 
    char[] result = new char[totalbits]; 
    int bits = totalbits; 
    uint number = value; 

    while (bits > 0) 
    { 
     bits--; 
     uint remainder = number % 2; 
     result[bits] = remainder == 0 ? '0' : '1'; 
     number /= 2; 
     if (number == 0) 
      break; 
    } 
    return new string(result, bits, totalbits - bits); 
} 

我在代碼中固定的錯誤:有8位字節,而不是16,按您的代碼。我還簡化了代碼的幾個部分。我使用了比if更簡潔的條件表達式。並且我引入了另一個局部變量來保存工作值以避免修改實際參數。這通常是很好的做法,可以使調試變得更容易我還使用uint作爲輸入參數,因爲整個方法取決於值是正值。

注意,終止循環內而不是在while測試。如果在while條件下測試number等於0,那麼您將最終返回輸入爲0的空字符串。

+0

謝謝你在這裏的解釋。我最初並沒有寫代碼。它是由程序員提供的,可以在初級階段教授,但我想我明白你已經做了什麼來使這個更高效/更好。初學者代碼通常不會' – user3276276

+0

這不適用於負數。 –

+0

@AustinHarris我正在更新,因爲你張貼! –

0

只是忽略所有的零位,你循環,直到你打一個「1」位。

這也適用於負數。

public static string ConvertIntToBinary(int number) 
    { 
     if (number == 0) return "0"; 
     var bits = (sizeof(int) * 8); // 8bits per byte 
     var sb = new StringBuilder(); 
     var print = false; 
     var mask = (uint)(1 << bits - 1); 
     while (bits-->0) 
     { 
      var bit = (number & mask) == mask; 
      if (bit) print = true; 
      if (print) sb.Append(bit ? '1' : '0'); 
      mask = mask >> 1; 
     } 
     return sb.ToString(); 
    }