2012-07-26 42 views
0

我已經使用this library。 我必須對BigUnsigned數字執行位操作。BigUnsigned integer(C++)

我的代碼是

#include "BigIntegerLibrary.h" 
BigUnsigned n1; 

for (int i = 0; i < 100;i++) 
{ 
    if (i < 5) 
    { 
     n1.setBit(i,true); 
    } 
    else 
    { 
     n1.setBit(i,false); 
    } 
} 

BigUnsigned n2; 
n2 = n1; 
n2.bitShiftLeft(n2 , 40); 

它給了我n20而不是34084860461056。這是爲什麼發生?

+0

它適用於我。你使用的是什麼操作系統和編譯器/ IDE?另外,如果你輸出'n2'值,請顯示你是如何做的。 – SingerOfTheFall 2012-07-26 05:54:18

+0

操作系統是Windows 7 – user1545975 2012-07-26 06:09:36

回答

4

這可能與庫的實現有關。我強烈建議使用GMP來執行此任務。我的解決方案看起來像這樣:

#include <iostream> 
#include <gmpxx.h> 
using namespace std; 

int main() { 

    mpz_class n2 = 0x1F; 

    n2 <<= 40; 

    cout << n2 << endl; 

    return 0; 
} 
+0

我用bigInteger的「[mattmccutchen.net/bigint/]」庫。 – user1545975 2012-07-26 06:08:47

+0

是的,所以你可以使用不同的庫來做你想做的事情。 GMP比那個bigInteger庫更強大。 – 2012-07-26 13:31:35

+0

如果我使用GMP庫函數「void mpz_init2(mpz t x,mp bitcnt t n)」。它能給我準確的125位數嗎?我可以在indesign SDK中使用這個GMP庫嗎? – user1545975 2012-07-27 09:01:23