在C++中有什么方法可以对mpz_class变量的每一位求反吗?例如,找到它的按位求补?
mpz_class
mpz_class num = 0b1110101; num = ~num; // num should now be 0b0001010
但是使用~num返回(-1) * num - 1,cmp函数实际上不起作用,因为它不改变任何参数值,它只返回1或-1。
~num
(-1) * num - 1
cmp
1
-1
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是一个常数,可以预先计算。
LENGTH
(mpz_class(1) << LENGTH) - 1
1条答案
按热度按时间a14dhokn1#
像这样的东西就像你说的
但是如果你想要一个绝对固定的长度,那么
对于
LENGTH
的一些合适的值。当然,如果你有一个固定的长度,那么(mpz_class(1) << LENGTH) - 1
是一个常数,可以预先计算。