如题,在嵌入式开发中,掌握位运算是节省开发时间和提高开发效率的一种高效方式。
我们不得不去熟悉如何快速掌握位运算这种高效的技巧,接下来看看程序。.
-
#include <stdio.h>
-
#include <stdlib.h>
-
int main(void)
-
{
-
unsigned
char num =
0xfe ;
//1111 1110
-
num &= ~(
1 <<
3 |
1 <<
2) ;
//1111 0010
-
printf(
"num:%x\n",num);
-
num |= (
1 <<
3 |
1 <<
2);
-
printf(
"num:%x\n",num);
-
getchar();
-
return
0 ;
-
}
程序执行过程中,num &= ~(1 << 3 | 1 << 2) ; 这句话的意思是将0xfe的第2位和第3位清0,于是第一个printf输出是:0xf2
如果你想继续清往后的几位,可以接着在后面或(|)上要清的位数。这里的非(~)表示按位取反,&=表示与上对应的数,这里是按位与上位1,我们都知道按位与的概念就是有1为1,有0为0。
num |= (1 << 3 | 1 << 2) ;这句话的意思是将0xf2这个数的第2位和第3位置一,于是第二个printf输出是:0xfe;也就恢复成初始值0xfe了。这里按位或的概念想必都清楚,有1一定为1,全0才为0。根据这些特性,很快,我们就可以操作对应的位了。
在操作硬件寄存器中,也是要熟练的操作位,方法雷同,要根据数据手册说明书来进行操作,以前写过一些文章,大家可以翻出来看看,熟悉一下。