Немного вертелся с GMP - PullRequest
       20

Немного вертелся с GMP

0 голосов
/ 28 февраля 2020

У меня есть переменная типа mpz_class. В двоичной форме я хотел бы получить последние n цифры. Обычно я достигал бы этого, используя битовую маску и сдвиг (1 << n)-1, но у GMP, похоже, нет простого оператора сдвига влево. Альтернативный подход может включать get_str(2), чтобы получить строковую версию двоичного представления, но я думаю, что для больших чисел это будет расточительно.

Какой лучший способ получить последние n цифр из переменной типа mpz_class?

Я нашел mpn_lshift() в https://gmplib.org/manual/Low_002dlevel-Functions.html но это кажется слишком сложным для простой задачи. Было бы полезно, если бы кто-нибудь мог предоставить мне простой пример того, как его можно использовать с mpz_class.

Я пробовал этот код, и он не компилируется из-за <<

#include <iostream>
#include <gmpxx.h>

using namespace std;

int main()
{
    mpz_class a(5);
    cout << "a: " << a << endl;
    mpz_class b = (mpz_class(1) << a);
    cout << "b: " << b << endl;

    return 0;
}
...