1 #include<stdio.h>
2 #define SET_BIT(x,n) (x|(1U<<(n-1)))
3 #define CLEAR_BIT(x,n) (x&~(1U<<(n-1)))
4 #define SET_BIT_N_M(x,n,m) (x|~(~(0U)<<(m-n+1))<<(n-1))
5 #define SET_CLEAR_N_M(x,n,m) (x&~(~(~(0U)<<(m-n+1))<<(n-1)))
6 #define GETBITS(x,n,m) ((x&~(~(0U)<<(m-n+1))<<(n-1))>>(n-1))
7 void main()
8 {
9 //用宏定义将32位数x的第n位(bit0算第一位)置位
10 unsigned int a=0;
11 a=SET_BIT(a,4);
12 printf("0x%x.\n",a);
13 //用宏定义将32位数x的第n位(bit0算第一位)清零
14 a=CLEAR_BIT(a,4);
15 printf("0x%x.\n",a);
16 //用宏定义将32位数x的第n到m位置位
17 a=0;
18 a=SET_BIT_N_M(a,1,8);
19 printf("0x%x.\n",a);
20 //用宏定义将32位数x的第n到m位清零
21 a=SET_CLEAR_N_M(a,1,4);
22 printf("0x%x.\n",a);
23
24 //获取变量X的特定位
25 a=0x1234;
26 a=GETBITS(a,5,8);
27 printf("0x%x.\n",a);
28 }