C语言位操作

C语言位操作

1 位操作运算符
1.1、与 (&)、或(|)、按位取反(~)
1.2、移位操作:左移(<<)、右移(>>)
2 位操作宏函数
2.1 bit n位置位,即bit n 置1其他位保持不变(从bit 0开始,如 0x01 bit 0为1)

#define SET_NTH_BIT(x,n) (x | (1U << n))

其中,1U 表示无符号整数1,左移n为得到bit n位为1,即掩码,与x按位或即可把x bit n置为1
2.2 bit n 位清零

#define CLEAR_NTH_BIT(x,n) (x & ~(1U << n))

其中,1U 表示无符号整数1,左移n为得到bit n位为1,即掩码,然后按位取反除bit n外所有位为1,与x按位与即可把x bit n清零
2.3 读取bit n位状态

#define GET_NTH_BIT(x,n) (x & (1U << n))

其中,1U 表示无符号整数1,左移n为得到bit n位为1,即掩码,与x按位与即可读取x 中 bit n的状态,因为 1&0 = 0,1&1 = 1,x中bit n位为1相与结果为1,反之为0.
2.4 读取bit n到bit m之间的连续位,其中 m > n

Step 1: 获得(m-n+1)个连续位为0的数,无符号整数左移和右移空缺的位补0,然后按位取反
~(0U) << (m-n+1) 
其中,~(0U)得到全为1的数,然后<<(m-n+1)位,得到(m-n+1)位为0,其他位为1
Step 2: 按位取反得到(m-n+1)个连续位为1的数
~(~(0U) << (m-n+1) )
Step 3: << n位获得 bit n 到 bit m之间连续位为1的数
(~(~(0U) << (m-n+1) ))<< n
Step 4: 与某一个数x按位与(&),得到x的bit n 到 bit m之间位
x & ((~(~(0U) << (m-n+1) ))<< n)
Step 5: 得到x的bit n 到 bit m之间位,然后>>n得到x的bit n 到 bit m之间位对应的数
( (x & ((~(~(0U) << (m-n+1) ))<< n))>> n)
宏定义函数为:
#define GETBITS(x,n,m) ( (x & ((~(~(0U) << (m-n+1) ))<< n))>> n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值