LargeInteger's equivalent of BigInteger's testBit?

匆匆过客 提交于 2019-12-11 10:30:00

问题


Does LargeInteger have an equivalent to BigInteger's testBit?

If not, how can testBit be performed on a LargeInteger?

I don't yet have the necessary skills to reproduce ((this & (1<<n)) != 0).


I tried making a method by just copying & pasting the above code referenced from the docs:

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

However, the compiler reports:

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:


This is the best I can come up with given the API:

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

n is the position of the bit to be tested.

I assume you put this method in some utility class.

Explanation

Normally, you would do num & (1 << pos) to extract the bit at pos position:

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

If the whole thing is 0 then x is 0; otherwise, x is 1.


In the method above, I do num >> pos:

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

We know that a binary number is odd when its least significant bit is 1, and it is even when its least significant bit is 0.

So if the number after right-shifting is odd, we know the bit is 1; if even, we know the bit is 0.



来源:https://stackoverflow.com/questions/21286794/largeintegers-equivalent-of-bigintegers-testbit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!