c和指针 03

#include
using namespace std;


//进行无符号整形数据的位反转
unsigned int reverse_bits(unsigned int value)
{
unsigned int retVal = 0;
for(int i=1; i!=0; i<<=1)  //保证不依赖机器的长度  依次左移 有多少移动多少
{
retVal <<= 1;  //左移 使得数据有余留的空间
if(value & 1)  //进行比较 如果有1 就进行数据的添加
retVal |= 1;
value >>= 1;  //下一个数据比较
}
return retVal;
}


bool isReasonable(char bit_array[], unsigned int bit_number)
{
int len = strlen(bit_array);
if(bit_number <0 || bit_number > len)
return false;
return true;
}
//实现位数组
void set_bit(char bit_array[], unsigned int bit_number) //用于将指定的位清1
{
if(isReasonable(bit_array,bit_number))
bit_array[bit_number] = '1';
}


void clear_bit(char bit_array[], unsigned int bit_number)  //用于将制定位清0
{
if(isReasonable(bit_array,bit_number))
bit_array[bit_number] = '0';
}


//用于将制定位清0 或者设置为1  有点不明白啊 还是把value 改成如下形式吧
void assign_bit(char bit_array[], unsigned int bit_number, bool bOk)
{
if(isReasonable(bit_array,bit_number))
if(bOk)
bit_array[bit_number] = '0';  //如果true 则设置为0 否则为1
else
bit_array[bit_number] = '1';
}


bool test_bit(char bit_array[], unsigned int bit_number)
{
if(isReasonable(bit_array,bit_number))
if(bit_array[bit_number] == '0')
return true;
return false;
}




//把一个给定的值存储到一个整数中指定的几位
int store_bit_field(int original_value, int value_to_store, unsigned int starting_bit, unsigned int ending_bit)
{
int mask = 0;  
    int i;  
//在此过程中 endint_bit比starting_bit要小
    for (i = ending_bit; i <= starting_bit; i++)  
    {  
        mask ^= (1 << i);   //根据提示 将需要的那些伟设置为1 原理 将1左移i即可
    }  
    original_value = (~mask) & original_value;  //用反码与原始值执行and操作
    mask &= (value_to_store << ending_bit);   //将新的指进行左移 并且与掩码进行and操作
    mask |= original_value;    //将结果值与原值进行or操作
    return mask;      
}


void print_bits(unsigned int value)
{
for(int i=31; i>=0; --i) //机器是32位的 就直接这样写了
{
cout<<((value>>i)&1);
}
}


int main(void)
{
unsigned int a = 25;
    cout<<reverse_bits(a)<<endl;


char aa[] = "0100100100100101010";
set_bit(aa,1);
cout<<test_bit(aa,2)<<endl;
cout<<aa<<endl;


//0 ---> 0
//0000 0000 0000 0000
//0000 0000 0001 0000  ---> 16
cout<<store_bit_field(0, 1, 4, 4)<<endl;


return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章