#include <iostream>
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;
}
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;
}