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;
}



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