2012-03-02 77 views
3

以下「增量」方法正在完美工作。但我想知道有沒有更快的方法來以較少的步驟來做到這一點。增加一個BitArray(二進制數)的最快方法是?

public BitArray Increment(BitArray bArray) 
    { 
     carry = true; 

     for (i = 0; i < 32; i++) 
     { 
      if (carry) 
      { 
       if (bArray[i] == false) 
       { 
        bArray[i] = true; 
        carry = false; 
       } 
       else 
       { 
        bArray[i] = false; 
        carry = true; 
       } 
      } 
     } 
     return bArray; 
    } 

感謝....

+3

BigInteger類更適合您的情況嗎? http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx – 2012-03-02 21:34:58

+0

你應該爲此使用'BigInteger'。 – 2012-03-02 21:35:59

回答

4

有一個很明顯的改進可以使:當你做罷!

public void Increment(BitArray bArray) 
{ 
    for (int i = 0; i < 32; i++) 
    { 
     bool previous = bArray[i]; 
     bArray[i] = !previous; 
     if (!previous) 
     { 
      // Found a clear bit - now that we've set it, we're done 
      return; 
     } 
    } 
} 

或者,如果你真的有32位(且僅會32位),爲什麼不直接使用int呢?增量真的很簡單!如果你願意的話,你總是可以把它包裝在自己的自定義結構中。

1

你當然可以在更少的步驟寫這篇文章並沒有分支:

bool newbit = bArray[i]^carry; 
carry = bArray[i] & carry; 
bArray[i] = newbit; 

這段代碼可以推廣到全加器,而不僅僅是一個增量。

0

沒有溢出處理:

for (int i = 0; i < 32 && !(bitArray[i] = !bitArray[i++]);); 

C-衍生for循環總是哭了默默無聞。

相關問題