public bool TestBit(
int n)
{
if (n < 0)
throw new ArithmeticException("Bit position must not be negative");
if (sign < 0)
return !Not().TestBit(n);
int wordNum = n / 32;
if (wordNum >= magnitude.Length)
return false;
int word = magnitude[magnitude.Length - 1 - wordNum];
return ((word >> (n % 32)) & 1) > 0;
}