位运算符
& 按位与
| 按位或
^ 按位异或 (相比较的两位不相同时,才输出1)
~ 按位取反
<<左移
>>右移
对寄存器位操作
复位清零操作:&=~
例子1:GPIOB_MODER&=~(3<<(2*9))
1.当前GPIOB_MODER寄存器中的数据未知,设32位数据为:
xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
2.系统先执行(3<<(29)),也就是将0011(默认32位),向左移动18位。
整体左移18位后结果:
0000 0000 0000 11xx xxxx xxxx xxxx xxxx
32位寄存器中,高18位被移出,由位移产生的空位系统自动补入0(x=0)。
3.将上述结果按位取反,得到
1111 1111 1111 0011 1111 1111 1111 1111
4.最后执行“GPIOB_MODER&~(3<<(29)”,并将值赋值给“GPIOB_MODER寄存器
xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx | |
---|---|
& | 1111 1111 1111 0011 1111 |