宏定义在位运算中的运用
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 }