【笔试题】位运算

记录一些常见的位运算题:


1、实现对一个8bit数据(unsigned char类型)的指定位(例如第n位)置0或者置1操作,并保持其他地位不变。

unsigned char reg;

/* 对第n位置0 */
reg &~= (1 << n);

/* 对第n位置1 */
reg  |= (1 << n);

这个操作常用在对寄存器的配置上,做驱动开发的,需要配置寄存器的某一位,在不确定寄存器该位的具体值的情况下,通常是先将其清0,再将其置位。

2、UART寄存器(32位)地址位0x10000000,写出将第2~第10位区域置为0x1F的代码段:

unsigned int reg_addr = 0x10000000;
*(volatile unsigned int *)reg_addr &~= (0xff << 2);
*(volatile unsigned int *)reg_addr  |= (0x1f << 2);

你可能感兴趣的:(数据结构,嵌入式,位运算)