1. 程式人生 > >【C語言】實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變

【C語言】實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變

請編碼實現以下功能的函式
功能:實現對一個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;
}