GMP 进口/出口

发布于 2024-11-14 16:40:21 字数 668 浏览 4 评论 0原文

我的导入/导出 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);

I have a problem with the import/export GMP function.
I try to convert a negative and positive big integer but when I work with negative number I lose the sign.
Are there any examples about it?

Export:

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];
  }
}

Import:

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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

念三年u 2024-11-21 16:40:21

mpz_export 文档 说:

忽略 op 的符号,仅使用绝对值。

The mpz_export documentation says:

The sign of op is ignored, just the absolute value is used.

甜心小果奶 2024-11-21 16:40:21

计算 myb 的补码,不要忘记负数的符号位。

compute complement of myb,and don't forget the sign bit for negative number.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文