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