繁体   English   中英

寻求一种在c ++中设置128位或更高位的集合的方法

[英]seeking a way to set a bitset of 128 bits or above in c++

我在我的代码中使用了一个大数字(超过128位整数)。 我发现c ++有std :: bitset来简化一些操作,所以我不必将我的数据分成几个整数。 但我很快就会发现另一个问题,如果我必须将几个(长整数)转换为bitset,那么最好的方法是什么? 例如,我试图将四个长整数(每个32位)转换为128位位集,以下方式不起作用,因为对于每个整数(移位操作仅适用于小于32的移位位)

std::bitset<256> b;
unsigned long v1=2, v2=9, v3=19, v4=1021;
b |= v1 | (v2<<32) | (v3<<64) | (v4<<128);

现在我使用for循环来设置bitset上的每个位,但我正在寻找一种更有效和更优雅的方法。

这可能不是最好的选择,但是这个呢?

typedef std::bitset<256> bs256;
b |= bs256(v1) | (bs256(v2) << 32) | (bs256(v3) << 64) | (bs256(v4) << 128);

我想你可能不得不忍着在循环中一点一点地设置它们:

int v[4]; //< keep your bitmasks in an array
int nbits = 8 * sizeof(v[0]);
for(int i = 0; i < 128; ++i) {
  int t = v[i / nbits];
  bit.set(i, t & (1 << (i % nbits)));
}

另一种方法是从bitset派生一个类,它不仅可以设置单个位,还可以设置任意位置的整个位集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM