将偶数二进制反转

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30103483/article/details/78275466

例如6的二进制为110,反转后就是011(倒过来了)
将偶数二进制反转,那为啥不是奇数呢,因为奇数二进制本身就是对齐的,反转也反转不了。

这段代码前面比较繁琐的就是算出整数最高位是多少,有点冗余了,但是囿于水平和时间,暂时只考虑到了这中方法,若有更好的方法,请一定要跟我指正。

int reverse_bin(int one)
{
    int bit, rn = 0;
    int ones,num = 0;

    /* 奇数反转过来就是其本身 */
    if( one%2 != 0 )
        return one;

    ones = one;
    while(1)
    {
        if( (ones/8) == 0)
        {
            if( (ones/4) == 0 )
                if( (ones/2) == 0 )
                    num += 1;
                else
                    num += 2;
            else
                num += 3;

            break;
        }
        else if( (ones/8) == 1 )
        {
            num += 4;
            break;
        }
        else    // 得到的数大于2及以上 
        {
            ones = ones / 8;
            num += 3;
            continue;
        }
    }

    while(one)
    {
        bit = one % 2;

        num--;
        rn = rn + bit*pow(2, num);

        one = one/2;
    }

    return rn;
}

猜你喜欢

转载自blog.csdn.net/qq_30103483/article/details/78275466