原创 C语言与单片机-11-基本运算1

2015-11-26 09:10 1567 11 2 分类: MCU/ 嵌入式 文集: C语言

   C使用运算符(operator)来代表算数运算。包括=、+、*、、/、%。

     赋值运算符“=”:

               " ="是赋值运算符。i=2这条很简单语句该怎么念出来?这么多年我的已经工作好多年同事还是念为“i等于2”。i是一个变量,也就一个变量的存储空间。怎么会等于2呢?

              正确的念法应该是“将2赋给变量i”。这种念法就准确的理解了“=”赋值运算符的含义。"="是从右往左执行的,

             i=j=x=2;执行结果会怎样?我们来分析一下,将2赋给变量x,将x变量的值赋给j,将j的值赋给i。

最后的结果就是i、j、x存储的内容都是2.我们来看看在keil中以下代码是怎么执行的

#include

void main(void)

{

      volatile  char i,j,x;

   

     i=1;

     j=3;

    x=4; 

     i=j=x=2;  

}

翻译成汇编语言

     2: void main(void) 

     3: { 

     4:    volatile  char i,j,x; 

     5:     

     6:    i=1; 

C:0x0003    750801   MOV      0x08,#0x01

     7:    j=3; 

C:0x0006    750903   MOV      0x09,#0x03

     8:    x=4;  

C:0x0009    750A04   MOV      0x0A,#0x04

     9:    i=j=x=2;  

    10:  

    11:     

C:0x000C    750A02   MOV      0x0A,#0x02

C:0x000F    750902   MOV      0x09,#0x02

C:0x0012    750802   MOV      0x08,#0x02

    12: }

C:0x0015    22       RET      

 

分析以上代码:将0x01存入8号地址(i),

                           #0x03存入9号地址(j),

                          #0x04存入10号地址(x),

                          #0x02存入10号地址(x),

                           #0x02存入9号地址(j)。

                          #0x02存入8号地址(i)。

    看看运行过程与我们分析的一样吗?绝对一样的。

      另外,在C中我们一般将“=”符号左边成为“左值(left value)”,右边称为“右值(right value)”。

一般是可以修改的值可以做为左值,右值是可以赋给左值的变量。比如:

                        i=2;

    i是左值,2是右值。大家想想2=i这条语句可以吗?在VC中试试看看能不能编译通过?

2是立即数,没有地址,怎么能接收 i 地址中的值?

           没有那个函数或者程序不使用赋值语句,所以虽然很简单,我们还是有必要介绍一下。

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条