如何在bitset中存储随机生成的无符号int数

时间:2015-04-27 04:55:40

标签: c++

我有一个位置,我需要存储一组随机生成的整数(当然存储它的位表示)。所以,问题是我对如何做到这一点感到困惑。

即假设我一次生成一个整数(所有unsigned int)8,15,20。如何将最近生成的整数存储在现有位集中。

假设我从生成“8”开始并存储在bitset中,然后生成“15”并将其存储在bitset中。

我不知道或不了解如何在bitset中存储这些值。

注意:我事先知道bitset的大小,大小是基于我要生成的整数的数量,我也知道。所以,最后我需要的是一个bitset,所有的位设置匹配所有生成的整数的位。

我会感谢您的帮助。

1 个答案:

答案 0 :(得分: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的成本。

#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;
}