#include <stdio.h>  
unsigned int set_bit(unsigned int num, int pos, int flag)  
{  
    int n = 1;  
    n = n << pos;    //将n的第pos位置1,其他全为0  
    if (flag == 0)  
    {  
        num = num&(~n);//将num的n位置0  
    }  
    else if (flag == 1)  
    {  
        num = num | n;  
    }  

    return num;  
}

调用如下:

int a = 0x10;
//位置从0开始
a = set_bit(a,1,1);//将a的第2位,置1,结果为10010即0x12