我必须执行左移和右移,并且我正在使用 gmp 库。
我用了代码
#include<gmp.h>
mpz_t t;
mpz_init2(t,125);
mpz_set_ui(t,31);
mpz_mul_2exp(t , t , 35);
它给我的 t 值为零。谁能帮帮我吗。
我必须执行左移和右移,并且我正在使用 gmp 库。
我用了代码
#include<gmp.h>
mpz_t t;
mpz_init2(t,125);
mpz_set_ui(t,31);
mpz_mul_2exp(t , t , 35);
它给我的 t 值为零。谁能帮帮我吗。
尝试使用 mpz_init 而不是 mpz_init2。
实际上,它应该适用于您的方法,因为该操作不超过您为 t 分配的 125 位。我现在刚刚测试过。你如何检查结果?你用过gmp_printf ("%Zd\n", t);
吗?
要将 GMP 整数的字符串表示形式转换为std::string
,您可以执行以下操作:
//get a pointer to GMP's internal memory deallocator function
void (*deallocator)(void *, size_t);
mp_get_memory_functions(NULL, NULL, &deallocator);
//get the string representation of input in binary
char *data = mpz_get_str(NULL, 2, input.data);
std::string output(data);
//deallocate data, including the terminator character
//calling std::free on the char * returned by mpz_get_str is a bad idea, because it is initialised internally by GMP
(*deallocator)((void *)data, std::char_traits<char>::length(data) + 1);
2018 年更新:上述代码的先前版本完全错误。当前版本应该是正确的。