C语言专题——位操作
位操作符
1.位与(&)
逻辑与(&&)
2.位或(|)
逻辑或(||)
3.位取反(~)
逻辑取反(!)
4.位异或(^)
不相同的两位异或为1
5.左移位<<
- C语言中移位操作要取决于数据类型:
无符号数:左移时右侧补0(相当于逻辑左移)右移时左侧补0(相当于逻辑右移)
有符号数:左移时右侧补0(相当于逻辑左移)右移时左侧补符号位。 - 嵌入式中研究的移位都是无符号数。
位与位或位异或在操作寄存器时的特殊作用
寄存器操作的要求
寄存器的特点是按位进行规划和使用,但是寄存器的读写是32位一起进行的,所以在设定特定位时不能影响其他位。
特定位清0用&
特定位置1用|
特定位取反用^
用位运算可以构建特定的二进制数
用宏定义来完成位运算
直接用宏来置位,复位
- 用宏定义将32位的bitn位置位
#define SET_BIT_N(x,n) (x|1<<n)
- 用宏定义将32位的bitn位清零
#define CLEAR_BIT_N(x,n) (x&~(1<<n))