2

左シフトと右シフトを実行する必要があり、gmp ライブラリを使用しています。

コードを使用しました

#include<gmp.h>

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

t の値はゼロです。誰でも私を助けてください。

4

1 に答える 1

2

mpz_init2 の代わりに mpz_init を使用してみてください。

実際には、操作が 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);

Update 2018: 上記のコードの以前のバージョンは完全に間違っていました。現在のバージョンは正しいはずです。

于 2012-07-30T12:37:47.670 に答える