寻求一种在 C++ 中设置 128 位或更高位集的方法
seeking a way to set a bitset of 128 bits or above in c++
我在代码中使用了一个大数字(超过 128 位整数)。我发现 c++ 有 std::bitset 来简化一些操作,所以我不必将数据分成几个整数。但是我很快发现了另一个问题,如果我必须将几个(长)整数转换为位集,最好的方法是什么?例如,我正在尝试将四个长整数(每个 32 位)转换为 128 位位集,以下方法不起作用,因为对于每个整数(shift 操作仅适用于小于 32 的移位)
std::bitset<256> b;
unsigned long v1=2, v2=9, v3=19, v4=1021;
b |= v1 | (v2<<32) | (v3<<64) | (v4<<128);
现在我使用 for 循环来设置位集上的每个位,但我正在寻找一种更有效、更优雅的方式来做到这一点。
这可能不是最好的选择,但是这个呢?
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
派生一个类,该类不仅可以设置单个位,还可以设置任意位置的整个位集。
相关文章:
- qmake:检测目标位宽(32 位或 64 位)
- 在 vscode 中运行时无法暂停或设置断点
- 如何通过使用 2 位或更多数字的 XOR 运算符来执行此操作C++问题
- 位集上的按位或给出错误的答案
- 位集构造函数中的一元按位或折叠
- 如何在图像位中设置标志以标记音频文件的结尾
- 什么是用途 |(按位或运算符)在setiosflags的上下文中?
- 我们是否需要担心 32 位或 64 位整数,或者我们只使用 'int'
- WT:未设置文档根或设置为空路径
- 什么可能导致故障位被设置在ofsream::open上
- 如果字节中的所有位都设置为高,则设置为高字节
- 将位图设置为 IMediaSample
- 为MSVC建造GTEST:32位或64位
- 您能否给我一个 16 位(或更多)十进制数,该十进制数仅在第 15 位正确转换为双精度浮点圆
- 故障位被设置为ifstream对象,原因是什么
- 我不明白为什么当我按位或短字符时得到这个结果
- MSVC:在64位代码中读取特定的64位或32位寄存器(例如R10)
- 寻求一种在 C++ 中设置 128 位或更高位集的方法
- std::cout 可以设置坏位或故障位与操作员<<吗?如果是,什么时候?
- 使用按位或代替std::max来设置缓冲区大小