ИМПОРТ/ЭКСПОРТ GMP

У меня проблема с функцией импорт/экспорт GMP. Я пытаюсь преобразовать отрицательное и положительное большое целое число, но когда я работаю с отрицательным числом, я теряю знак. Есть пример по этому поводу?

Экспорт:

                    int mydim = (mpz_sizeinbase(c, 2) +7)/ 8;
                    myb =  ( char*) malloc(sizeof(char) * mydim);
                    count = (size_t*) malloc(sizeof(size_t));

                    if(mpz_sgn(c)>=0){
                    mpz_export((void *) myb, count, 1, sizeof( char), 1, 0, c);
                            }
                            else{
                    mpz_add_ui(c,c,1);
                    mpz_export((void*)myb, count, 1, sizeof( char), 1, 0, c);
                    for(int i =0;i<=mydim;i++){ //This could be done more effectively
                            myb[i]=~myb[i];
                    }
                    }

Импорт:

            mpz_import(s, *count, 1, sizeof(myb[0]), 1, 0, myb);
            int sign = myb[0] < 0?-1:1;
            if(sign == -1)
                    mpz_neg(s,s);

person Gianluca    schedule 09.06.2011    source источник
comment
Как объявляется myb? Если это char *, проверьте, является ли char подписанным или неподписанным на вашей платформе.   -  person Nemo    schedule 09.06.2011
comment
char подписан. если я использую char в своем приложении, результат всегда отрицательный. если я использую unsigned char, результат всегда положительный   -  person Gianluca    schedule 09.06.2011


Ответы (1)


В документации mpz_export говорится:

Знак op игнорируется, используется только абсолютное значение.

person Nemo    schedule 09.06.2011