您的位置:首页 > 编程语言 > C语言/C++

C语言经典算法(五)——求位设置的两种方法

2017-12-28 18:37 295 查看
今后继续整理算法并写出自己的理解和备注。 C++实现的:位设置(bit_set)

1、 位设置(bit_set)

<1> 题目描述: 对一个unsigned char 8 bit数据的指定位置0或置1操作,并保持其他位不变。

函数原型:void bit_set(unsigned char *p_data, unsigned char position, bool flag);

参数说明:p_data 是指定的原数据,position是指定位(取值范围1~8),flag表示是置0还是置1操作

<2> 方法一:分支设置法

<3> 方法二:位操作设置法

源码:

一、位设置(bit_set)

1、分支设置法

#include<iostream>
using namespace std;
void bit_set(unsigned char *p_data, unsigned char position, bool flag)
{
if(flag)//1
{
switch(position)
{
case 1://把第一位置1
*p_data |= 0x01;//想要哪一位为1 则对哪一位进行或运算 1|1=1,1|0=1;
break;
case 2:
*p_data |= 0x02;//0000 0010
break;
case 3:
*p_data |= 0x04;
break;
case 4:
*p_data |= 0x04;
break;
case 5:
*p_data |= 0x05;
break;
case 6:
*p_data |= 0x06;
break;
case 7:
*p_data |= 0x07;
break;
case 8:
*p_data |= 0x08;
break;
}
}
else //flag =0 置0运算
{
switch(position)
{
case 1:
*p_data &=~ 0x01;//先取反,再与运算1&0=0,0&0=0
break;
case 2:
*p_data &=~ 0x02;
break;
case 3:
*p_data &= ~0x03;
break;
case 4:
*p_data &= ~0x04;
break;
case 5:
*p_data &= ~0x05;
break;
case 6:
*p_data &= ~0x06;
break;
case 7:
*p_data &=~ 0x07;
break;
case 8:
*p_data &=~ 0x08;
break;
}
}
}
void main()
{
bool flag = true;//置1为真,置0为假
//bool flag = false;//置0
unsigned char data = 'A';
unsigned char position = 3;
bit_set(&data,position,flag);
cout<<data<<endl;
}


2、 位操作设置法

不需要一个个情况列出来,根据位操作去左移即可

#include<iostream>
using namespace std;
void bit_set(unsigned char *p_data, unsigned char position, bool flag)
{
unsigned char v = 0x01;
if(flag)//1
{
*p_data |= (v <<(position-1));//如果置第五位,则只用移动4位
}
else //0
{
*p_data &= ~(v <<(position-1));
}
}
void main()
{
bool flag = true;
//bool flag = false;
unsigned char data = 'A';
unsigned char position = 3;
bit_set(&data,position,flag);
cout<<data<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 算法