Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GMP库功能_C++ - Fatal编程技术网

C++ GMP库功能

C++ GMP库功能,c++,C++,GMP库中是否有函数提供任何GMP变量的位长度 mpz_t temp; mpz_init(temp); mpz_set_ui(temp,356678789); 那么如何找到temp的位长度呢?也许有更好的方法,但在阅读之后,我想到了这个方法: mp_bitcnt_t msb(mpz_t& m) { mpz_t n = m.get_moz_t(); mp_bitcnt_t remaining = mpz_popcount(n), last = -1; while (remai

GMP库中是否有函数提供任何GMP变量的位长度

mpz_t temp;
mpz_init(temp);
mpz_set_ui(temp,356678789);

那么如何找到temp的位长度呢?

也许有更好的方法,但在阅读之后,我想到了这个方法:

mp_bitcnt_t msb(mpz_t& m) {
  mpz_t n = m.get_moz_t();
  mp_bitcnt_t remaining = mpz_popcount(n), last = -1;
  while (remaining) {
    --remaining;
    last = mpz_scan1(n, last + 1);
  }
  return last;
}

GMP有一个库功能,可以为您实现这一点:

size_t mpz_sizeinbase (mpz_t OP, int BASE)
然后
mpz_sizeinbase(温度2)
是表示abs(温度)所需的位数:

返回给定基中以位数测量的OP大小。基数可以从2到62不等。忽略OP的符号,只使用绝对值。结果要么精确,要么太大。如果基数是2的幂,则结果总是精确的。如果OP为零,则返回值始终为1


给定数字的位数。(例如25,然后二进制值11001,位长度=5)