2011-03-01 49 views
0

我有一個奇怪的問題。我創建了一個簡單的函數來將十進制轉換爲二進制。該參數是一個int值,它表示十進制數,該函數返回一個表示二進制數的位集。從十進制轉換爲二進制並返回位集時的問題

問題是,對於小於10000000000000000000000000000000(2,147,483,648的十進制數)的二進制數的轉換完美地工作,但是當要轉換的數字更高時,轉換不能正常工作。錯誤在哪裏?

在這裏,我向您發送功能:

bitset<15000> Utilities::getDecToBin(int dec) 
{ 
    bitset<15000> columnID; 
int x; 
    for(x=0;x<columnID.size();x++) 
    { 
     columnID[x]=dec%2; 
     dec=dec/2; 
    } 

    return columnID; 
} 

預先感謝您的幫助! :D

+0

更好地使用邏輯運算符而不是算術運算符:'columnID [x] = dec & 1; dec >> = 1;' – 2011-03-01 10:17:45

回答

0

您應該使用long intlong int或甚至string的數組作爲您的方法的輸入(取決於數據的來源以及如何調用您的函數)。

1

32位int的範圍是-2,147,483,648至2,147,483,647。

如果大一點你的意思是1073741825,那麼我看不出有什麼不對。

如果您的意思是在最重要的位置添加一個位(即2147483648),那麼您可能會遇到簽名/未簽名的問題。

我看到你通過columnID的大小來限制你的循環。以dec爲單位的大小限制它也是一個好主意,或者在dec爲0時停止。

+0

你是對的!問題是超過32位......所以有一個問題呢?哪個變量類型可以讓我獲得最大的整數?因爲我需要,也許不是15,000位整數,而是類似的東西。 – thomas 2011-03-01 11:02:55

0

我很驚訝它只能工作到30位,你應該能夠管理31但32你需要無符號整數。如果你使用無符號的64位整數,你可以管理更多,但是15,000位整數只能通過特殊類來實現。

+0

ups!你寫了!問題是超過32位......所以有一個問題呢?哪個變量類型可以讓我獲得最大的整數?因爲我需要,也許不是15,000位整數,而是類似的東西。 – thomas 2011-03-01 11:02:13

+0

我知道支持的最大常規整數類型只有64位,如果你使用這個unsigned,你可以使用它們的全部64個。特定於C++的實現,但通常被定義爲uint64_t或類似的類型。 – CashCow 2011-03-01 11:28:15