请编码实现:实现一个对8Bit数据(unsigned char 类型)的指定位(例如第n位)的置0或者置一操作,并保持其他位不变。

来源:互联网 发布:淘宝分销合作协议书 编辑:程序博客网 时间:2024/05/22 13:42
#include <stdio.h>void bit_set(unsigned char *p_data,unsigned char position,int flag){if(flag)//将标志位变为1时用或等于{switch(position){case 1:*p_data |= 0x01;break;case 2:*p_data |= 0x02;break;case 3:*p_data |= 0x04;break;case 4:*p_data |= 0x08;break;case 5:*p_data |= 0x10;break;case 6:*p_data |= 0x20;break;case 7:*p_data |= 0x40;break;case 8:*p_data |= 0x80;break;default:break;}}else//将标志位置为0时用与等于(取反){switch(position){case 1:*p_data &= ~0x01;break;case 2:*p_data &= ~0x02;break;case 3:*p_data &= ~0x04;break;case 4:*p_data &= ~0x08;break;case 5:*p_data &= ~0x10;break;case 6:*p_data &= ~0x20;break;case 7:*p_data &= ~0x40;break;case 8:*p_data &= ~0x80;break;default:break;}}printf("%d\n",*p_data);}


测试为:

int main(){unsigned char ch = 'A';//01000001bit_set(&ch,3,1);//01000101bit_set(&ch,7,0);//00000101return 0;}


执行结果如图:


方法可以简化如下:

#include <stdio.h>void bit_set(unsigned char *p_data,unsigned char position,int flag){//只认定一位进行移位或与计算if(flag){*p_data |= (0x01<<(position-1));}else{*p_data &= ~(0x01<<(position-1));}printf("%d\n",*p_data);}

测试如下:

int main(){unsigned char ch = 'A';//01000001bit_set(&ch,3,1);//01000101bit_set(&ch,7,0);//00000101return 0;}

执行结果如图:



两者比较可知,对于程序应该在实现功能的同时进行函数简化。

0 0