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