嵌入式难免和芯片的寄存器打交道,操作寄存器需要用到位操作。
清除某位、置1某位这些基本操作就不说了,来点干货。
#define BITX(x) (1ul<<(x))
一. 32位系统,生成一个数,这个数的第x位至第y位为1,其余位为0. 0<=x<=y<=31
要求:速度要快,算法复杂度O(1)
示例1: #define BITS_X2Y(x, y) (((BITX(x)-1)^(BITX(y)-1)) | BITX(y))
结论: 这示例符合要求,效率极高,a = BITS_X2Y(0, 1); 会被编译器优化为 a = 3;
PS1:有没有人有其他实现方法?
PS2:可能有人觉得实现这个功能没有卵用,其实后面几个位操作会用到这功能。
|