位操作总结

以下位操作以如下图序列,小端序:
在这里插入图片描述

获取某一位:

#define	GET_BIT(x, bit)	((x & (1 << bit)) >> bit)	/* 获取第bit位 */

清0某一位:

#define	CLEAR_BIT(x, bit)	(x &= ~(1 << bit))	/* 清零第bit位 */

置位某一位:

#define	SET_BIT(x, bit)	(x |= (1 << bit))	/* 置位第bit位 */

获取连续几位的值(uint8_t):

/* 获取第[n:m]位的值 */
#define BIT_M_TO_N(x, m, n)  ((uint8_t)((uint8_t)x << (7-(n))) >> ((7- (n)) + (m)))

如获取x值的[3:2]位的值,则为 BIT_M_TO_N(x,2,3)

清0连续几位的值(uint8_t)

#define CLEAR_M_TO_N(x,m,n)  ((x)&(~((BIT_M_TO_N(0xffu,m,n))<<(m))))

置位连续几位的值(uint8_t)

#define SET_M_TO_N(x,m,n)  ((x)|((BIT_M_TO_N(0xffu,m,n))<<(m)))

获取连续几位的值(uint32_t):

/* 获取第[n:m]位的值 */
#define BIT_M_TO_N(x, m, n)  ((unsigned int)(x << (31-(n))) >> ((31 - (n)) + (m)))

清0连续几位的值(uint32_t)

#define CLEAR_M_TO_N(x,m,n)  ((x)&(~((BIT_M_TO_N(0xffffffffu,m,n))<<(m))))

置位连续几位的值(uint32_t)

#define SET_M_TO_N(x,m,n)  ((x)|((BIT_M_TO_N(0xffffffffu,m,n))<<(m)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大文梅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值