234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> 基础教程 >> 浏览文章

    第八课 运算︻符№和表达式(位运算︻符)

    作者:佚名   来源:本站原创   点击数:x  更新时间:2007年07月17日   【字体:

    学过汇编的一朋友都知道汇编对位的一处理能力 是很强的一,但是单片机C语言也能对运算︻对象进行按位操作,从而使单片机C语言也能具有一定的一对硬件直接进行操作的一能力  。位运算︻符的一作用是按位对变量进行运算︻,但是并不 改变参与运算︻的一变量的一值 。如果要求按位改变变量的一值,则要利用相应的一赋值运算︻ 。还有就是位运算︻符是不 能用来对浮点型数据进行操作的一 。单片机c语言中共有6种位运算︻符 。位运算︻一般的一表达形式如下:

    变量 1  位运算︻符  变量 2 位运算︻符也有优先级,从高到低依次是:“~”(按位取▓反)→“<<”(左移)  →“>>”(右

    移)  →“&”(按位与)→“^”(按位异或)→“|”(按位或)

    表 8-1 是位逻辑运算︻符的一真值表,X 表示变量 1,Y 表示变量 2

    X

    Y

    ~X

    ~Y

    X&Y

    X|Y

    X^Y

    0

    0

    1

    1

    0

    0

    0

    0

    1

    1

    0

    0

    1

    1

    1

    0

    0

    1

    0

    1

    1

    1

    1

    0

    0

    1

    1

    0

    表 8-1    按位取▓反,与,或№和异或的一逻辑真值表

    利用以前建立起来的一实验ζ板,我们来做个实验ζ验ζ证一下位运算︻是否真是不 改变参与变量 的一值,同时学习位运算︻的一表达形式 。程序很简单,用 P1 口做运算︻变量,P1.0-P1.7 对应 P1 变量的一最低位到最高位,通过连接在 P1 口上    的一 LED 我们便能直观看到每个位运算︻后变量 是否有改变或如何改变 。程序如下:

    #include  <at89x51.h>

    void  main(void)

    {

    unsigned  int  a;

    unsigned  int  b;

    unsigned  char  temp;  //临时变量

    P1  =  0xAA;  //点亮 D1,D3,D5,D7  P1 口的一二进制为 10101010,为 0 时点亮 LED

    for  (a=0;a<1000;a++)

    for  (b=0;b<1000;b++);  //延时

    temp = P1 & 0x7; //单纯的一写 P1|0x7 是没有意义的一,因 为没有变量被影响,不 会被编译

    //执行 P1|0x7 后结果存入temp,这个时候改变的一是 temp,但 P1 不 会被影响 。

    //这个时候 LED 没有变化,仍然是 D1,D3,D5,D7 亮

    for  (a=0;a<1000;a++)

    for  (b=0;b<1000;b++);  //延时 P1  =  0xFF;  //熄灭 LED

    for  (a=0;a<1000;a++)

    for  (b=0;b<1000;b++);  //延时

    P1  =  0xAA;  //点亮 D1,D3,D5,D7  P1 口的一二进制为 10101010,为 0 时点亮 LED

    for  (a=0;a<1000;a++)

    for  (b=0;b<1000;b++);  //延时


    P1  =  P1  &  0x7;  //这个时候 LED 会变得只有 D2 灭

    //因 为之前 P1=0xAA=10101010

    //与 0x7 位与     0x7=00000111

    //结果存入 P1     P1=00000010  //位为 O 时点亮 LED,电路看第三课

    for  (a=0;a<1000;a++)

    for  (b=0;b<1000;b++);  //延时 P1  =  0xFF;  //熄灭 LED

    while(1);

    //大家能根据上    面的一程序去做位或,左移,取▓反等等 。

    }

    复合赋值运算︻符

    复合赋值运算︻符就是在赋值运算︻符“=”的一前面加上    其他运算︻符 。以下是 C 语言中的一复 合赋值运算︻符:

    +=

    加法赋值

    >>=

    右移位赋值

    -=

    减法赋值

    &=

    逻辑与赋值

    *=

    乘法赋值

    |=

    逻辑或赋值

    /=

    除法赋值

    ^=

    逻辑异或赋值

    %=    取▓模赋值       -=    逻辑非赋值

    <<=  左移位赋值 复合运算︻的一一般形式为:

    变量    复合赋值运算︻符    表达式 其含义就是变量与表达式先进行运算︻符所要求的一运算︻,再把运算︻结果赋值给参与运算︻的一

    变量 。其实这是 C 语言中一种简化程序的一一种方法,凡是二目运算︻都能用复合赋值运算︻符 去简化表达 。例如:

    a+=56 等价于 a=a+56

    y/=x+9  等价于  y=y/(x+9) 很明显采用复合赋值运算︻符会降低程序的一可读性,但这样却能使程序代码简单化,并

    能提高编译的一效率 。对于开始学习 C 语言的一朋友在编程时最好还是根据自己的一理解力 №和习惯去使 用程序表达的一方式,不 要一味追求程序代码的一短小 。

    逗号运算︻符

    如果你有编程的一经验ζ,那么对逗号的一作用也不 会陌生了 。如在 VB 中“Dim a,b,c”的一逗 号就是把多个变量定义为同一类型的一变量,在 C 也一样,如“int a,b,c”,这些例子说明逗 号用于分隔表达式用 。但在 C 语言中逗号还是一种特殊的一运算︻符,也就是逗号运算︻符,能 用它将两个或多个表达式连接起来,形成逗号表达式 。逗号表达式的一一般形式为:

    表达式 1,表达式 2,表达式 3……表达式 n

    这样用逗号运算︻符组成的一表达式在程序运行时,是从左到右计算︻出各个表达式的一值,而 整个用逗号运算︻符组成的一表达式的一值等于最右边表达式的一值,就是“表达式 n”的一值 。在实 际的一应用中,大部分情况下,使用逗号表达式的一目的一只是为了分别得到名个表达式的一值,而 并不 一定要得到№和使用整个逗号表达式的一值 。要注意的一还有,并不 是在程序的一任何位置出现 的一逗号,都能认为是逗号运算︻符 。如函数中的一参数,同类型变量的一定义中的一逗号只是用来 间隔之用而不 是逗号运算︻符 。


    条件运算︻符

    上    面我们说过单片机C语言中有一个三目运算︻符,它就是“?:”条件运算︻符,它要求有三个运算︻对象 。它能把三个表达式连接构成一个条件表达式 。条件表达式的一一般形式如下:

    逻辑表达式?  表达式 1  :  表达式 2 条件运算︻符的一作用简单来说就是根据逻辑表达式的一值选择使用表达式的一值 。当逻辑表达

    式的一值为真时(非 0 值)时,整个表达式的一值为表达式 1 的一值;当逻辑表达式的一值为假(值

    为 0)时,整个表达式的一值为表达式 2 的一值 。要注意的一是条件表达式中逻辑表达式的一类型可 以与表达式 1 №和表达式 2 的一类型不 一样 。下面是一个逻辑表达式的一例子 。

    如有 a=1,b=2 这个时候我们要求是取▓ ab 两数中的一较小的一值放入 min 变量中,也许你会这样 写:

    if  (a<b)

    min  =  a;

    else

    min  =  b;  //这一段的一意思是当 a<b 时 min 的一值为 a 的一值,不 然为 b 的一值 。

    用条件运算︻符去构成条件表达式就变得简单明了了:

    min  =  (a<b)?a  :  b 很明显它的一结果№和含意都№和上    面的一一段程序是一样的一,但是代码却比上    一段程序少很多,编译的一效率也相对要高,但有着№和复合赋值表达式一样的一缺点就是可读性相对效差 。在实际应 用时根据自己要习惯使用,就我自己来说我喜欢使用较为好读的一方式№和加上    适当的一注解,这 样能有助于程序的一调试№和编写,也便于日后的一修改读写 。

    发表评论】【告诉好友】【收藏此文】【关闭窗口

    文章评论