按位与运算 &
&0
是屏蔽该位(使该位清0),&1
是该位不变
常用来查看或分离某一位的值
举例
1 | TIM2ch1_cap_sta&0x40 |
按位或运算 |
|0
是不变,|1
是置1
常用来把某一位设置为1
举例
1 | TIM2ch1_cap_sta |= 0x80; |
按位异或 ^
^0
是不变,^1
是反转
常用来反转某一位的值,比如把0变成1,1变成0
1 | 0000 1111 & 0000 0011 = 0000 0011 |
异或运算的四条性质
任意一个变量X与其自身进行异或运算,结果为0,即X^X=0
任意一个变量X与0进行异或运算,结果不变,即X^0=X
异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)
异或运算具有可交换性,即a^b=b^a
左移 <<
向左移动相应的位数
1 | 1 1 1 1 1 1 1 1 << 1 ----> |
右移 >>
向右移动相应的位数
1 | 1 1 1 1 1 1 1 1 >> 1 ----> |
综合运用举例
设置寄存器的值
1 | GPIOA -> CRL &= 0XFFFFFF0F;// 将第 4-7 位清 0 |
移位操作提高代码可读性
1 | GPIOx -> BSRR = (((uint32_t)0x01) << pinpos); |