public BigInteger ClearBit(
int n)
{
if (n < 0)
throw new ArithmeticException("Bit address less than zero");
if (!TestBit(n))
return this;
// TODO Handle negative values
if (sign > 0 && n < (BitLength - 1))
return FlipExistingBit(n);
return AndNot(One.ShiftLeft(n));
}