如何將最近生成的整數存儲在我現有的位集中。
您可以從整數中生成一個臨時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;
}
是否有任何理由你想使用'bitset'而不是'set'或'unordered_set'? –
我認爲將數字存儲爲整數會更容易,並在需要時創建相應的「bitset」。 –
嗨@ gha.st,我想使用一個bitset,因爲它可以讓我輕鬆訪問這些位。有時我需要訪問** nnth **位。或者從位** a **讀到位** b **。等等,我已經讀過這個bitset是相當不錯的。 – Hassingard