C++ GMP库功能
GMP库中是否有函数提供任何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
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)