LargeInteger相当于BigInteger的testBit?

时间:2014-01-22 15:17:13

标签: java biginteger jscience

LargeInteger是否等同于BigInteger's testBit

如果没有,如何在testBit上执行LargeInteger

我还没有必要的技能来复制((this & (1<<n)) != 0)


我尝试通过复制&amp;粘贴从文档中引用的上述代码:

static boolean testBit(int n){
    return ((this & (1<<n)) != 0);
}

然而,编译器报告:

error: non-static variable this cannot be referenced from a static context
    return ((this & (1<<n)) != 0);
             ^
error: bad operand types for binary operator '&'
    return ((this & (1<<n)) != 0);
                  ^

1 个答案:

答案 0 :(得分:3)

鉴于API,这是我能想到的最好的结果:

static boolean testBit(LargeInteger i, int n) {
    return i.shiftRight(n).isOdd();
}

n是要测试的位的位置。

我假设您将此方法放在某个实用程序类中。

说明

通常,您会num & (1 << pos)提取pos位置的位:

???????x?????
0000000100000
-------------
0000000x00000

如果整个事物为0则x为0;否则,x为1。


在上面的方法中,我做num >> pos

???????x?????
-------------
????????????x

我们知道二进制数在其最低有效位为1时为奇数,即使其最低有效位为0也是奇数。

因此,如果右移后的数字是奇数,我们知道该位是1;如果是偶数,我们知道该位是0。