LargeInteger
似乎没有BigInteger
's and
的等效功能。
自and(BigInteger val)
“Returns a BigInteger whose value is (this & val). (This method returns a negative BigInteger if and only if this and val are both negative.)
”以来,我试图跟随this great answer on reproducing testBit
static LargeInteger and(LargeInteger i, LargeInteger j) {
return i & j;
}
但编译器报告
error: bad operand types for binary operator '&'
return i & j;
^
BigInteger
and
怎样才能复制LargeInteger
?
答案 0 :(得分:0)
从文档来看,有一些方法可以将LargeIntegers转换为字节数组,还可以从字节数组创建一个LargeInteger。因此,您可以执行以下操作:
convert operands to byte arrays
combine the individual bytes with the operator you want (&, |, ^)
convert resulting byte array back to LargeInteger
现在,如果我错了,请纠正我,但原始的python代码似乎只做n & 1
。
既然你有even()和odd()方法,为什么不使用它们呢?以下身份持有:
large & 1 = large.odd() ? 1 : 0
答案 1 :(得分:0)
org.jscience.mathematics.number.LargeInteger
似乎没有类似的按位功能and
(如果我有正确的类和版本)。
static LargeInteger and(LargeInteger lhs, LargeInteger rhs) {
long l = lhs.longValue(); // Low order bits
long r = rhs.longValue();
long lo = l & r;
LargeInteger hi = LargeInteger.ZERO;
if (lhs.bitLength() > 64 && rhs.bitLength() > 64) {
hi = and(lhs.shiftRight(64), rhs.shiftRight(64)).shiftLeft(64);
}
return hi.plus(lo);
}
请注意,对于按位or
,条件需要||
而不是&&
。