二进制开方

int MathInt_sqrt(unsigned long n)
{
    int root;
    int m;
    int left;
    root = 0;
    left = (int)n;
    m = 1 << (sizeof(int) * 8 - 2);
    do {
        if (( left & -m ) > root) {
            root += m;
            left -= root;
            root += m;
        }
        root >>= 1;
    } while (m >>= 2);
    return root;
}

 

posted @ 2014-03-26 14:10  起个名字真费劲  阅读(378)  评论(0编辑  收藏  举报