gmp库中的shift操作

时间:2012-07-30 11:58:04

标签: c++

我必须执行左移和右移,我正在使用gmp库。

我使用了代码

#include<gmp.h>

mpz_t t;
mpz_init2(t,125);
mpz_set_ui(t,31);
mpz_mul_2exp(t , t , 35);

它给我的值t为零。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:2)

尝试使用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:上述代码的上一版本完全错误。当前版本应该是正确的。