0

LargeIntegerBigIntegerは の と同等の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.)しようとしましたtestBit

static LargeInteger and(LargeInteger i, LargeInteger j) {
    return i & j;
}

しかし、コンパイラは報告します

error: bad operand types for binary operator '&'
    return i & j;
             ^

上で使用するためにどのように再現できBigIntegerますか?andLargeInteger

4

2 に答える 2

0

ドキュメントから判断すると、LargeInteger をバイト配列に変換する方法と、バイト配列から 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
于 2014-01-22T17:22:56.323 に答える
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の条件では、||代わりに&&.

于 2014-01-22T17:27:20.237 に答える