C++ GMP中的NOT运算符

vbopmzt1  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(177)

在C++中有什么方法可以对mpz_class变量的每一位求反吗?例如,找到它的按位求补?

mpz_class num = 0b1110101;
num = ~num; // num should now be 0b0001010

但是使用~num返回(-1) * num - 1cmp函数实际上不起作用,因为它不改变任何参数值,它只返回1-1

a14dhokn

a14dhokn1#

像这样的东西就像你说的

num = ((mpz_class(1) << mpz_sizeinbase(num.get_mpz_t(), 2)) - 1 - num);

但是如果你想要一个绝对固定的长度,那么

num = ((mpz_class(1) << LENGTH) - 1 - num);

对于LENGTH的一些合适的值。当然,如果你有一个固定的长度,那么(mpz_class(1) << LENGTH) - 1是一个常数,可以预先计算。

相关问题