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、分支设置法
2、 位操作设置法
不需要一个个情况列出来,根据位操作去左移即可
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语言经典算法(九)——递归实现二分查找的两种方法
- C语言经典算法(八)——递归实现斐波那契数列的两种方法
- C语言经典算法(六)——递归实现字符串长度的两种方法
- C语言经典算法(七)——递归实现阶乘算法的两种方法
- C语言经典算法(二)——求最小公倍数的两种方法
- C语言经典算法(四)——高效进制转换的三种方法
- Mac OS X:两种方法改变Login窗口的语言变更/设置
- 排列和组合算法的实现方法_C语言经典案例
- Mac OS X:两种方法改变Login窗口的语言变更/设置
- C语言经典算法(三)——求二进制中1的个数的五种方法
- Android的语言设置两种方法
- 易语言设置选择框外形形式的方法
- C# web api返回类型设置为json的两种方法
- (转)Android中两种设置全屏的方法
- 在xib和storyBoard上设置layer属性的两种方法
- java经典算法_021利用递归方法求5!
- C语言经典算法例题求100-999之间的“水仙花数
- SSE图像算法优化系列十六:经典USM锐化中的分支判断语句SSE实现的几种方法尝试。
- 排列和组合算法 C语言经典实现
- Spring读取外部的.properties文件内容并设置给bean的两种方法