структура данных c ++ для хранения 128 бит данных - PullRequest
0 голосов
/ 07 января 2019

Мне нужна структура данных для хранения около 120 бит данных.

У меня есть битовые манипуляции, такие как type var = 0X01000000000000000000000000000000) >> 120

Какова лучшая структура данных для хранения таких длинных данных?

Ответы [ 4 ]

0 голосов
/ 07 января 2019

Любая причина, чтобы избежать 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
0 голосов
/ 07 января 2019

Вы можете использовать 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';        
}

Вы можете увидеть демо здесь .

0 голосов
/ 07 января 2019

Какова лучшая структура данных для хранения таких длинных данных?

Вариант 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; };

Трудно сказать, какой из них лучше всего послужит вам, не зная о них больше.

0 голосов
/ 07 января 2019

Если вы не укажете, что именно вы хотели бы использовать с этими битами, std::bitset, вероятно, будет лучшим выбором.

Кроме того, gcc и clang поддерживают unsigned __int128 на некоторых целях. Впрочем, это нестандартно.

...