嵌入式C语言位运算之清位置位
2016-06-14 16:47
267 查看
如题,在嵌入式开发中,掌握位运算是节省开发时间和提高开发效率的一种高效方式。
我们不得不去熟悉如何快速掌握位运算这种高效的技巧,接下来看看程序。.
如果你想继续清往后的几位,可以接着在后面或(|)上要清的位数。这里的非(~)表示按位取反,&=表示与上对应的数,这里是按位与上位1,我们都知道按位与的概念就是有1为1,有0为0。
num |= (1 << 3 | 1 << 2) ;这句话的意思是将0xf2这个数的第2位和第3位置一,于是第二个printf输出是:0xfe;也就恢复成初始值0xfe了。这里按位或的概念想必都清楚,有1一定为1,全0才为0。根据这些特性,很快,我们就可以操作对应的位了。
在操作硬件寄存器中,也是要熟练的操作位,方法雷同,要根据数据手册说明书来进行操作,以前写过一些文章,大家可以翻出来看看,熟悉一下。
我们不得不去熟悉如何快速掌握位运算这种高效的技巧,接下来看看程序。.
#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。根据这些特性,很快,我们就可以操作对应的位了。
在操作硬件寄存器中,也是要熟练的操作位,方法雷同,要根据数据手册说明书来进行操作,以前写过一些文章,大家可以翻出来看看,熟悉一下。
相关文章推荐
- 嵌入式C语言位运算之清位置位
- C# 中静态调用C++dll 和C# 中动态调用C++dll
- 堆排序(C++实现)
- Protocol Buffer技术详解(C++实例)
- sizeof和strlen的区别?
- C语言中的static 详细分析
- PAT乙级练习题1002. 写出这个数
- 【扫盲点】——C语言enum枚举类型、union共用体
- 通过windbg排查程序内存泄露
- C++面向对象编程
- C++面向对象基础知识详解一
- C++析构函数为什么要为虚函数
- C++虚基类构造函数
- House Robber III
- C语言里的结构体
- 计算器——C++实现(CLR版本)
- MFC动态加载图片
- c++类的声明
- C++之多线程(posix简介)
- C++常见容器的迭代器类型