~ 和 !
按位取反“~”,逻辑反“!”一个数(非0),取两次逻辑反!就会变成1;
位异或
位异或“^”,两个数相同(1或0),结果为0;不同结果为1;记忆方法:相异就或起来。
左右移
无符号数左移、右移都补0
特定位写1
x | 1<<X
#define SET_BIT_N(x,n) (x | (1U<<(n-1)))//U代表1为无符号
特定位写0
x & ~(1<<x)
#define REST_BIT_N(x,n) (x & (~(1U<<n-1))) //U代表1为无符号
高级位操作:
- 宏定义将x的第n位到m为置位;
#define SET_N_M_NUM(X,N,M) (x | ((~0)>>( 32-m-n+1)) <<(n-1) )
解:
设把x的第5位到低8位置1
(1)将a=0xffffffff>>32-(8-5+1) =…1111
(2)将其<<5-1 =…11110000
(3) x |=a
- 宏定义截取x的第n到第m位
解:先重复第9步,再与& x,再右移n-1位;