实例1

在一个多任务嵌入式系统中,有一个CPU可直接寻址的32位寄存器REGn,地址为0x1F000010,编写一个安全的函数,将寄存器REGn的指定位反转(要求保持其他bit的值不变)。

特定位取反用^=

void bit_reverse(uint32_t nbit)
{
    ((volatile unsigned int *)0x1F000010) ^= (0x01 << nbit);
}

实例2

给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a的bit3。

特定位置1用|=

#define BIT3 (0x01 << 3)
static a;

void setBit3(void)
{
	a |= (0x01 << 3);
}

特定位清零用&=~

#define BIT3 (0x01 << 3)
static a;

void clearBit3(void)
{
	a &= ~(0x01 << 3);
}

读取第n位的值

(a>>n)&1

参考: