private static void ShiftRightInPlace(
int start,
int[] mag,
int n)
{
int nInts = (int)((uint)n >> 5) + start;
int nBits = n & 0x1f;
int magEnd = mag.Length - 1;
if (nInts != start)
{
int delta = (nInts - start);
for (int i = magEnd; i >= nInts; i--)
{
mag[i] = mag[i - delta];
}
for (int i = nInts - 1; i >= start; i--)
{
mag[i] = 0;
}
}
if (nBits != 0)
{
int nBits2 = 32 - nBits;
int m = mag[magEnd];
for (int i = magEnd; i > nInts; --i)
{
int next = mag[i - 1];
mag[i] = (int)((uint)m >> nBits) | (next << nBits2);
m = next;
}
mag[nInts] = (int)((uint)mag[nInts] >> nBits);
}
}