c语言位操作

~ 和 !

按位取反“~”,逻辑反“!”一个数(非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位;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值