简单的位运算 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 将会失去其魅力的三分之一,

呵呵,可以证明条件编译是多么的重要啦~~~~

posted @ 2010-08-01 13:25  Second Life  阅读(576)  评论(0编辑  收藏  举报