У меня есть переменная типа 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;
}