记录一些常见的位运算题:
- unsigned char reg;
-
- /* 对第n位置0 */
- reg &~= (1 << n);
-
- /* 对第n位置1 */
- reg |= (1 << n);
这个操作常用在对寄存器的配置上,做驱动开发的,需要配置寄存器的某一位,在不确定寄存器该位的具体值的情况下,通常是先将其清0,再将其置位。
- unsigned int reg_addr = 0x10000000;
- *(volatile unsigned int *)reg_addr &~= (0xff << 2);
- *(volatile unsigned int *)reg_addr |= (0x1f << 2);