public int GetLowestSetBit()
{
if (m_sign == 0)
return -1;
int w = m_magnitude.Length;
while (--w > 0)
{
if (m_magnitude[w] != 0)
break;
}
int word = (int)m_magnitude[w];
Debug.Assert(word != 0);
int b = (word & 0x0000FFFF) == 0
? (word & 0x00FF0000) == 0
? 7
: 15
: (word & 0x000000FF) == 0
? 23
: 31;
while (b > 0)
{
if ((word << b) == int.MinValue)
break;
b--;
}
return ((m_magnitude.Length - w) * 32 - (b + 1));
}