[华为机试练习题]41.取给定正整数的指定bit位开始的指定长度的数据

题目

描述: 接口说明

原型:

unsigned int GetBitsValue(unsigned int input, unsigned int startbit, unsigned int bitlen)

输入参数:

    input      输入的整数

     startbit   需要获取的开始bit

     bitlen     需要获取的bit长度

输出参数(指针指向的内存区域保证有效):

返回值:

    对应的bit取值

举例:

输入:4, 2, 2

返回:2

4对应的二进制为100(bit0和bit1为0,bit2为1),那么从bit2开始的2位为10,那么对应的十进制为2。

练习阶段:

初级  

代码

/*--------------------------------------- * 日期:2015-07-02 * 作者:SJF0115 * 题目:取给定正整数的指定bit位开始的指定长度的数据 * 来源:华为机试练习题 -----------------------------------------*/
#include "OJ.h"
#include <iostream>
using namespace std;

/* Description 取给定正整数的指定bit位开始的指定长度的数据。bit位从右向左从0开始计算。 Prototype unsigned int GetBitsValue(unsigned int input, unsigned int startbit, unsigned int bitlen) Input Param input 输入的整数 startbit 需要获取的开始bit bitlen 需要获取的bit长度 Output Param 无 Return Value 对应的bit取值 */

unsigned int GetBitsValue(unsigned int input, unsigned int startbit, unsigned int bitlen){
    unsigned int tmp = input;
    for(int i = 0;i <=(startbit-bitlen);++i){
        tmp= tmp >> 1;
    }//for
    unsigned int result=0;
    // bitlen位1 11111
    for(int i = 0;i < bitlen;++i){
        result=2*result+1;
    }//for
    tmp = tmp & result;
    return tmp;
}

你可能感兴趣的:(华为机试练习题)