# BigInteger doesn't support >>>

I have a large number. I need to grab the number represented by the first 21 bits. I do this by doing:
(number & 0xFFFFF8000L) >>> 15;
That works in java because the number is of type long which is 64 bits. However, in javascript I have found that the bitwise operators truncate values down to 32 bits. So, to get around this I found a javascript implementation of the Java class BigInteger. It is at:
http://www-cs-students.stanford.edu/~tjw/jsbn/
I can do the mask using the and() method. But, I don't know how to do the shift. The javascript implementation, like the Java implementation of BigInteger, does not support unsigned bitwise shifts.

I can do this:

var origEncodedVal = 26766802693;
var encodedVal = new BigInteger(""+origEncodedVal, 10);

but won't the final result be wrong if the initial bit is set in the original encoded value? I'm not worried about other masks on that number like 0x000007F00 because the high bit will be 0 regardless, so a signed shift and unsigned shift do the same thing in that case..

How do I deal with this? Why does BigInteger not implement unsigned shift right? The javadoc of BigInteger says:
"The unsigned right shift operator (>>>) is omitted, as this operation makes little sense in combination with the "infinite word size" abstraction provided by this class."
but that statement doesn't make any sense to me.

I suppose one solution would be to shift right one bit and then AND it with a mask that zeroes out the high bit. Is that my best bet or is there a better way to do it? Another solution I suppose would be to prefix the original number with "0" and adjust the masks accordingly. It just seems silly that I would need to do that though.
###### Who is Participating?

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
If you need to right shift, just divide by 2 the number of times you want ot shift.
Java DeveloperCommented:
BigInteger has no defined word size, so its not a problem as the virtual sign bit won't be affected.

Experts Exchange Solution brought to you by