二进制翻转

二进制翻转

Table of Contents

1 要求

请编写函数

unsigned int reverse_bits(unsigned int value);

这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如:在32位机器上,25这个值包含下列各个位:

00000000000000000000000000011001

函数的返回值应该是2550136832,它的二进制位模式是:

10011000000000000000000000000000

2 分析

为了考虑移植性的问题,unsigned int 的位长度可以通过计算得到比如sizeof(unsignedint)*8,或者将for写成for(unsigned int i=1;i!=0;i<<=1),这样for循环的次数就能限制住了。本题可以通过循环的测试value的最低位值,然后不断右移,从而遍历value的bits。

3 题解

unsigned int reverse_bits( unsigned int value )
{
    unsigned int result=0;
    unsigned int i=0;
    for(i=1;i!=0;i<<=1)
    {
        result<<=1;
        if(value&1)
            reuslt|=1;
        value>>=1;
    }
    return result;
}

Date: 2014-11-04T20:40+0800

Author: kirchhoff

Org version 7.9.3f withEmacs version 24

Validate XHTML 1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值