C++ 数据结构,可容纳 128 位数据

c++ data structure to hold 128 bits of data

本文关键字:数据 可容纳 数据结构 C++      更新时间:2023-10-16

我需要一个数据结构来保存大约120位的数据。

我有像 var = 0X01000000000000000000000000000000)>> 120 之类的位操作

保存如此冗长的数据的最佳数据结构是什么?

除非你指定你想用这些位做什么,否则std::bitset可能是你最好的选择。

此外,gcc 和 clang 支持在某些目标上unsigned __int128。虽然,这是非标准的。

您可以使用

std::bitset .它有运算符operator<<operator>>为它定义。

一个最小的例子:

#include <iostream>
#include <bitset>
int main()
{
    std::bitset<120> b("01000000000000000000000000000000");
    std::cout << "initial value: " << b << 'n';
    b >>= 12;
    std::cout << "final value: "  << b << 'n';        
}

您可以在此处查看演示。

保存如此冗长的数据的最佳数据结构是什么?

选项 1:

struct MyType { uint8_t data[16]; };

选项 2:

struct MyType { uint16_t data[8]; };

选项 3:

struct MyType { uint32_t data[4]; };

选项 4:

struct MyType { uint64_t data[2]; };

选项 5:

struct MyType { std::bitset<128> data; };

如果不了解它们,就很难说哪一个最能满足您的需求。

有什么理由避免std::bitset吗?

#include <bitset>
...
std::bitset<128> bs;
bs[0] = 1; bs[127] = 1;
std::cout << bs.to_string() << std::endl;
// prints 128 digits with ones on both ends