How do you do *integer* exponentiation in C#?

A pretty fast one might be something like this:

int IntPow(int x, uint pow)
{
    int ret = 1;
    while ( pow != 0 )
    {
        if ( (pow & 1) == 1 )
            ret *= x;
        x *= x;
        pow >>= 1;
    }
    return ret;
}

Note that this does not allow negative powers. I’ll leave that as an exercise to you. 🙂

Added: Oh yes, almost forgot – also add overflow/underflow checking, or you might be in for a few nasty surprises down the road.

Leave a Comment