【C語言】實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變
阿新 • • 發佈:2018-11-30
請編碼實現以下功能的函式
功能:實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變。
函式原型:void bit_set(unsigned char *p_data,unsigned char position,int flag)
分析:1111---15
把第三位置0後為:1011 而1011是由原資料與1011按位與所得,而想得到1011,就可以由0100按位取反得到,而0100,又由1左移兩位(pos-1位)得到
同理:1011---11
把第三位置1後為:1111 而1111是由原資料與0100按位或所得,而0100是1左移兩位所得即pos-1位得到
具體程式碼如下:
#include <stdio.h> #include <stdlib.h> #include <assert.h> char bit_set(unsigned char *p_data, unsigned char pos, int flag) { assert(p_data); if (flag == 1) { *(p_data) |= (1 << (pos - 1)); } else if (flag==0) { *(p_data) &=~(1 << (pos - 1)); } return *p_data; } int main() { unsigned char num1= 15;//1111 unsigned char ret1 = bit_set(&num1, 3, 0);//11 printf("%d\n", ret1); unsigned char num2= 11; unsigned char ret2 = bit_set(&num2, 3, 1); printf("%d\n", ret2); system("pause"); return 0; }