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

标签 c++ bitset

我在我的代码中使用了一个大数字(超过 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);

关于c++ - 寻求一种在 C++ 中设置 128 位或更高位的位集的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10159307/

相关文章:

Java多位/紧凑型小整数数组

c++ - 为什么这个模板特化在 GCC 中不起作用?

c++ - 如何在 C++ 中通过命令行参数传递常量 int?

c++ - 在使用 vs2005 的项目中包含一个在 vs2010 中编译的 .lib 文件

c++ - 处理c中的插件

java - 如何计算BitSet对象中的总位数?

java - 为什么在Java中将字节数组转换为BitSet会得到错误的位表示

java - 如何将二进制序列末尾的零存储到 BitSet (Java) 中?

c++ - 如何使用 C++ 计算 char* 的 MD5

c++ - 在 Eclipse 中调试 Boost.Test : debugger won't stop at break points