Java 大整数';s等价于BigInteger';s和?

Java 大整数';s等价于BigInteger';s和?,java,binary,biginteger,jscience,Java,Binary,Biginteger,Jscience,似乎没有与之等效的函数 由于和(BigInteger val)“返回一个值为(this&val)的BigInteger。(当且仅当this和val均为负值时,此方法才返回负的BigInteger。)”,因此我尝试使用 但是编译器报告 error: bad operand types for binary operator '&' return i & j; ^ 如何复制biginger和以用于LargeInteger?从文档判断,有一些方法可以

似乎没有与之等效的函数

由于
和(BigInteger val)
返回一个值为(this&val)的BigInteger。(当且仅当this和val均为负值时,此方法才返回负的BigInteger。)
”,因此我尝试使用

但是编译器报告

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

如何复制
biginger
以用于
LargeInteger

从文档判断,有一些方法可以将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
。 既然有偶数()和奇数()方法,为什么不使用它们呢?以下身份适用:

 large & 1 = large.odd() ? 1 : 0

org.jscience.mathematics.number.LargeInteger
似乎没有类似的位函数
(如果我有正确的类和版本)


请注意,对于按位
而言,条件需要
|
而不是
&&

您真的确定大整数是您想要的吗?看起来你做了很多位级的事情,但在那里不受支持?@Ingo谢谢你找Ingo!不,我一点也不担心,但ed25519的性能在使用
biginger
时是无法忍受的,我发现用
LargeInteger
替换ed25519可能是一个很容易解决的瓶颈。如果在代码转换后,它工作正常且速度更快,我将分叉并上传更改。如果
不可能,我可以通过将
大整数
转换为
大整数
来回退,但我更愿意完全删除
大整数
。谢谢你,英戈!你是对的,我不知道,因为我没有二进制的经验。我只是想用
LargeInteger
代替ed25519。我也没有密码学方面的经验,所以我屏住呼吸,希望这能奏效。@Gracchus,看看我是否正确,你只需要(&1),而不是一般的(x&y)。
将操作数转换为字节数组
但我找不到这样的方法(只找到从字节转换为大整数的方法)。你找到的方法是什么?@nhahtdh
 large & 1 = large.odd() ? 1 : 0
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);
}