简单的位运算 and 相当好用的_条件编译_
霍霍,单片机中有这么多的寄存器,几乎每个二进制位都控制着一个系统硬件模块的供电,对其操作如果稍有不慎的话,就会切断某个模块的能源供应,所以我们在操作其寄存器的时候,不得不谈谈一些常用的简单的位运算啦,嚯嚯,
1:先说说文如其形的移位运算吧“《”and “》”他是一个双目运算,X《n。就是将X以二进制位的方式,向左移动n个单位,在ICC的编译环境中,我们常常用的一个运算符是:
PORTA|=BIT(n),其实他的本质就是PORTA|=(1《n),你只要打开<macros.h>就会发现其中的奥秘…
还有,如果我们假设X=1;那X《0=1;
X《1=2;
X《2=4;
X《3=8;
………发现了吗?左移一位就相当于乘以了2。
如果我们假设X=8;那X》0=8;
X》1=4;
X》2=2;
X》3=1;
………发现了吗?右移一位相当于除以2。
利用移位运算来取代程序中的除法运算,大大提高了代码的执行效率...
左移和右移不仅能够做除法之用,还可以从一大串数据中,过滤出我们想要的数据。
如果我们想要提取unsigned int X 中8—11为中的数据,存到MAX中
MAX=((X《4)》12);
2:取反运算“~”,颠倒是非的罪魁祸首,将1变0,将0变1;
3:与运算“&”,你们可以这样想象,与 是很专政的,具有一票否决权,只要有一个是0就是0
4:或运算“|”,霍霍,或是个好人,一票就可以通过哦~~~
5:异或运算“^”,记住一句话就好了,求同存异,如果相同就是0,不相同就是1~~~
嚯嚯,说了一下简单的位运算,接下来终于轮到C语言的N大魅力之一的条件编译了~~~
条件编译怎么说了?那我就举几个实例好了,这样也比较便于理解:
1: #if 条件表达式
//条件满足时,将编译或者预编译这里的代码
#else 条件表达式
//条件满足时,将编译或者预编译这里的代码
#else 条件表达式
//条件满足时,将编译或者预编译这里的代码
#endif
2: #ifdef 宏名称
//如果该宏之前被定义过,将编译或者预编译这里的代码
#else
//如果该宏之前没有被定义过,将编译或者预编译这里的代码
#endif
3: #ifndef 宏名称
//如果该宏之前没有被定义过,将编译或者预编译这里的代码
#else
//如果该宏之前被定义过,将编译或者预编译这里的代码
#endif
如果我们希望根据条件编译取消前面某个宏,可以里利用:#undef
4: #define BUFFER_SIZE 100
#if BUFFER_SIZE > 60
#undef BUFFER_SIZE
#define BUFFER_SIZE 60
嚯嚯,看见书上某高手说,如果C program 中没有条件编译,
C program 将会失去其魅力的三分之一,
呵呵,可以证明条件编译是多么的重要啦~~~~