将偶数二进制反转

例如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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值