C语言位运算的封装

背景介绍

位运算就是直接对整数在内存中的二进制位进行操作,它是C语言的强大的特性之一。

功能 位运算符 说明
按位与 a & b
按位或 a | b
按位异或 a ^ b
按位取反 ~a
左移 a << b a左移b位,就是a乘以2的b次方
右移 a >> b a右移b位,就是a除以2的b次方

需要注意它与逻辑运算的区分。

功能 逻辑运算符
逻辑与 a && b
逻辑或 a
逻辑非 !a

在进行嵌入式开发时,常会有对寄存器进行位运算的场景。通过使用位运算,可以提高程序的执行效率,但会使代码变得生涩难懂。通过设置合适的位掩码,我们可以封装一些常用的位操作方法,如复位置位翻转取值等。以下是四种比较常用位运算的函数实现。

源码说明

/**
 * @brief 将某个字节的某一位 置0
 * @param byte: byte need to be operated
 * @param bitNum: number of the bit
 * @retval result of the operation
 */
uint8_t BitOpt_ResetBit(uint8_t byte, uint8_t bitNum)
{
	byte &= ~(0x01<<bitNum);

	return byte;
}



/**
 * @brief 将某个字节的某一位 置1
 * @param byte: byte need to be operated
 * @param bitNum: number of the bit
 * @retval result of the operation
 */
uint8_t BitOpt_SetBit(uint8_t byte, uint8_t bitNum)
{
	byte |= (0x01<<bitNum);

	return byte;
}



/**
 * @brief 将某个字节的某一位 翻转
 * @param byte: byte need to be operated
 * @param bitNum: number of the bit
 * @retval result of the operation
 */
uint8_t BitOpt_ReverseBit(uint8_t byte, uint8_t bitNum)
{
	byte ^= (0x01<<bitNum);

	return byte;
}



/**
 * @brief 获取某个字节的某一位的值
 * @param byte: byte need to be operated
 * @param bitNum: number of the bit
 * @retval result of the operation (0 or 1)
 */
uint8_t BitOpt_GetBit(uint8_t byte, uint8_t bitNum)
{
	return (byte & (0x01<<bitNum))>>bitNum;
}

猜你喜欢

转载自blog.csdn.net/u013441358/article/details/108127850
今日推荐