2015-04-27 26 views
1

我有一個位集,我需要存儲一個隨機生成的整數(存儲它的位表示當然)。所以,問題是我很困惑如何做到這一點。如何在一個位集中存儲隨機生成的無符號整數數字

即,假設我每次生成一個整數(所有無符號整數)8,15,20。如何將最近生成的整數存儲在我現有的位集中。假設我從生成「8」開始存儲位集,然後生成「15」並將其存儲在位集中。

我不知道或不明白如何將這些值存儲在bitset中。

注:我事先知道位集的大小,大小取決於我要生成的整數的數量,而且我也知道。所以,最後我需要的是一個bitset,所有的位設置匹配所有生成的整數的位。

我會欣賞你的幫助。

+0

是否有任何理由你想使用'bitset'而不是'set'或'unordered_set'? –

+0

我認爲將數字存儲爲整數會更容易,並在需要時創建相應的「bitset」。 –

+0

嗨@ gha.st,我想使用一個bitset,因爲它可以讓我輕鬆訪問這些位。有時我需要訪問** nnth **位。或者從位** a **讀到位** b **。等等,我已經讀過這個bitset是相當不錯的。 – Hassingard

回答

2

如何將最近生成的整數存儲在我現有的位集中。

您可以從整數中生成一個臨時bitset,然後在兩個bitset之間分配值。

實施例的程序:

#include <iostream> 
#include <bitset> 
#include <cstdlib> 

int main() 
{ 
    const int size = sizeof(int)*8; 
    std::bitset<2*size> res; 
    std::bitset<size> res1(rand()); 
    std::bitset<size> res2(rand()); 

    for (size_t i = 0; i < size; ++i) 
    { 
     res[i] = res1[i]; 
     res[size+i] = res2[i]; 
    } 

    std::cout << "res1: " << res1 << std::endl; 
    std::cout << "res2: " << res2 << std::endl; 
    std::cout << "res: " << res << std::endl; 

    return 0; 
} 

輸出:

res1: 01101011100010110100010101100111 
res2: 00110010011110110010001111000110 
res: 0011001001111011001000111100011001101011100010110100010101100111 

更新

設置給定的整數,可以使用的bitset值,以避免創建臨時的成本函數bitset s。

#include <iostream> 
#include <bitset> 
#include <cstdlib> 
#include <climits> 

const int size = sizeof(int)*8; 

void setBitsetValue(std::bitset<2*size>& res, 
        int num, 
        size_t bitsetIndex, 
        size_t numIndex) 
{ 
    if (numIndex < size) 
    { 
     res[bitsetIndex] = (num >> numIndex) & 0x1; 
     setBitsetValue(res, num, bitsetIndex+1, numIndex+1); 
    } 
} 

int main() 
{ 
    std::bitset<2*size> res; 
    int num1 = rand()%INT_MAX; 
    int num2 = rand()%INT_MAX; 
    std::bitset<size> res1(num1); 
    std::bitset<size> res2(num2); 

    std::cout << "res1: " << res1 << std::endl; 
    std::cout << "res2: " << res2 << std::endl; 

    setBitsetValue(res, num1, 0, 0); 
    setBitsetValue(res, num2, size, 0); 

    std::cout << "res: " << res << std::endl; 

    return 0; 
} 
+0

這實際上很有幫助,雖然我關心性能,因爲我會產生大量的整數,這意味着如果我例如生成1000000個整數,我將有1000000個臨時的位集。有沒有辦法只有一個bitset,只是設置每個新生成的整數的位? – Hassingard

+0

@CarlosDavid,我懷疑有一些技巧可以避免臨時的'bitset'。我不知道它的副手。 –

+0

@CarlosDavid,查看更新。 –

相關問題