位运算是指二进制之间的运算。在嵌入式系统设计中,常常要处理二进制的问题,如将某个寄存器的某一位置1或置0,将数据左移5位等。常用的位运算符如图所示。
按位与运算符(&)
**按位与运算规则:**参加运算的两个操作数,每个二进制位进行“与”的运算,如果两位都是1,则运算结果为1,否则为0.
例: 1001&1011运算过程如图所示。
但仅仅知道上述运算规则是远远不够的,在STM32系列处理器的开发过程中,按位与运算主要是用来清除某一位,或者说主要用来实现清零。
按位或运算符(|)
按位或运算符的规则: 参加运算的两个操作数,每个二进制位进行“或”运算,如果两位都是0,则运算结果也为0,否则为1。
例: 1000|1010运算过程如图所示。
但仅仅知道上述运算规则是远远不够的,在STM32系列处理器的开发过程中,按位或运算主要是用来将某一位置1,或者说主要用来实现置1操作。
按位取反运算符(~)
按位取反运算符用来对一个二进制数按位取反。
例: ~1000表示将1000按位取反,得到结果0111.
左移右移运算符(<<)、(>>)
左移运算(<<)用来将一个数左移若干位,右移运算(>>)用来将一个数右移若干位。
例: 假设val是个unsigned char型数据,其对应的二进制数是10010110,则val=val<<3,表示将val左移三位然后赋值给val,注意在左移过程中,高位移除后则丢弃,低位补0 。最后val=10110000 。
例: 假设val是个unsigned char型数据,其对应的二进制数是10010110,则val=val>>3,表示将val右移三位然后赋值给val,注意在右移过程中,低位移除后则丢弃,高位补0 。最后val=000100101 。