2012-07-30 6 views
1

왼쪽 시프트와 오른쪽 시프트를 수행해야하며 gmp 라이브러리를 사용하고 있습니다. gmp 라이브러리에서 시프트 연산

내가 뭔가 나에게 t의 값을 제공 코드

#include<gmp.h> 

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

을 사용 제로이다. 아무도 도와주세요.

+0

: 수의 이진 표현을 인쇄하기 위해

,이 같은 시도? 'gmp_printf ("% Zd \ n", t);'를 코드에 추가하면 기대 값인'1065151889408'이 출력됩니다. –

답변

0

mpz_init2 대신 mpz_init를 사용해보세요.

실제로 연산은 사용자가 지정한 125 비트를 초과하지 않으므로 사용자의 방법으로 정상적으로 작동해야합니다. 방금 테스트를했습니다. 어떻게 결과를 검사하고 있습니까? gmp_printf ("%Zd\n", t);을 (를) 사용하셨습니까? 어떻게 값을 관찰하는

unsigned short base = 2U; 
char *data = mpz_get_str(NULL, base, t); 

std::string output(data); 

//not sure how it gets allocated inside mpz_get_str... 
//might produce some weird issues in GMP V4.1 under Windows, but works OK with any version on Linux. Also, MPIR works OK. Use with caution 
std::free(data); 

//you can also print the char * if you want, but avoid passing around raw pointers in C++ 
std::cout << output << std::endl; 
+0

나는 mpz_init를 사용했으나 같은 결과를 주었다. 정확한 125 비트의 숫자가 있습니다. Plz help me – user1545975

+0

네, 맞아요. 내 업데이트 된 답변을 참조하십시오. –

+0

환영합니다 :) GMP 데이터 유형에 표준 디버거를 사용할 수 없으므로 값을 검사하기 위해 어떻게 든 인쇄해야합니다. 오해의 소지가 있으므로 디버거를 절대로 믿지 마십시오. 자세한 내용은 여기를 참조하십시오 : http://gmplib.org/manual/Formatted-Output-Strings.html –