<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機之C語言-4.4運算符及表達式

          51單片機之C語言-4.4運算符及表達式

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          4.4 運算符表達式

          前面三節(jié)實際是講如何定義一個數(shù)據(jù)類型,所謂數(shù)據(jù)類型其實就是不同存儲空間的形狀,也就是不同單元格的組合方式。既然定義了數(shù)據(jù)類型,我們的目的當(dāng)然是如何使用它們,比如賦值,比較大小,移位變化,等待。簡單的講就是”誰”-數(shù)據(jù)類型, “怎么樣”-如何運算。往我們定義的單元格中填充內(nèi)容。既然要運算當(dāng)然有配套的運算符和表達式,現(xiàn)在將各種運算符及表達式總結(jié)如表4-4-1所示。

          本文引用地址:http://www.ex-cimer.com/article/201611/319553.htm

          這里我們選取幾個在單片機編程中比較常見的運算符進行講解。

          (1) 自增運算和自減運算

          對于運算符相信大家非常熟悉,這里不細(xì)講。值得提醒一下的是,自增和自減運算符,

          ++a:a的值先增加1后,再參與其他運算

          a++: a的值先參與其他運算,再使a的值增加1

          --a: a的值先減小1后,再參與其他運算

          a--: a的值先參與其他運算,再使a的值減小1

          這里我們舉一個例子:

          a = 1;

          b = 0;

          a = ++b;

          a = 1;

          b = 0;

          a = b++;

          現(xiàn)在我們在VS2013中驗證一下輸出結(jié)果,

          #include

          void main(void)

          {

          int a, b;

          a = 1;

          b = 0;

          b = a++;

          printf("a=%dnb=%dn",a,b);//輸出結(jié)果a=2,b=1

          a = 1;

          b = 0;

          b = ++a;

          printf("a=%dnb=%dn",a,b);//輸出結(jié)果a=2,b=2

          system("pause");

          }

          (2)賦值運算

          賦值運算符很好理解,需要注意的是書寫形式,比如

          a = a + 1;

          很多情況下我們看到的表達式是把運算符”+”放到”=”前面,然后把第二個a去掉

          a += 1;

          (3)關(guān)系運算符

          在關(guān)系運算符中,在比較a與b是否相等的時候,使用a==b,這里容易漏掉一個等號

          而a=b表示把b的值賦給a

          (4)邏輯運算

          參加邏輯運算的對象,用”0”表示假,用”非0”表示真.

          邏輯運算的運算規(guī)則可見的歸納為:

          邏輯與-同真為真,邏輯或同假為假,邏輯非遇假變真,遇真變假

          (5)位運算

          左移的規(guī)則是將二進制數(shù)向左移動若干位,左邊移走的高位被丟棄,右邊被空出來的低位補零。

          右移的規(guī)則是將二進制數(shù)向右移若干位,右移與被移動的數(shù)據(jù)是否帶符號有關(guān)。對于無符號整數(shù)來講,左端空出的高位全部補0.

          這里我們不討論帶符號的位移

          例4-4-1 通過位移的方法創(chuàng)建流水燈

          #include "reg52.h"

          typedef unsigned char uchar;

          void delayUs(uchar t);

          void delayMs(uchar t);

          void main(void)

          {

          uchar LED=0X80;//10000000

          uchar i;

          while(1)

          {

          for (i=0;i<8;i++)

          {

          P1= ~LED;//按位非

          LED>>=1;

          delayMs(100);

          }

          LED=0X80;

          }

          }

          void delayUs(uchar t)

          {

          while(--t);

          }

          void delayMs(uchar t)

          {

          while(--t)

          {

          delayUs(245);

          delayUs(245);

          }

          }

          (6)逗號和條件運算符

          逗號運算符是所有運算符中優(yōu)先級最低的,運算的結(jié)果值是最后一個表達式的值。例如:

          int a,b,c,d;

          d=(a=1,b=a+2,c=b+3);

          printf("d=%dn",d)

          那么以上輸出的結(jié)果為6.在很多情況下,使用逗號表達式的目的只是想分別得到各個表達式的值,而并非一定需要得到和使用整個逗號表達式的值,逗號表達式最常用與循環(huán)語句(for語句)中。

          例如:

          for(s=0,i=1;i<=100;s+=i,i++)

          條件表達式的一般形式為:

          表達式1 ?表達式2 :表達式3

          條件表達式中含有三個操作對象,它們都是表達式。一般,表達式1是關(guān)系表達式或邏輯表達式,用于描述條件表達式中的條件,根據(jù)條件的真假判斷是進行表達式2的運算還是進行表達式3的運算。表達式2和表達式3可以是常量,變量或表達式如算術(shù)表達式,關(guān)系表達式,賦值表達式和邏輯表達式等。

          一般情況下,條件表達式與結(jié)構(gòu)程序設(shè)計中的if語句可以進行相互替換。

          例如:

          max = (a>b) ? a : b

          用if語句表示為:

          if (a>b)

          {

          max=a;

          }

          else

          {

          max=b;

          }

          但不是所有的條件語句都能替換,比如

          if (a>b)

          {

          printf("%d",a);

          }

          else

          {

          printf("%d",b);

          }

          這里不能使用以下語句替換,

          a>b?printf("%d",a) : printf("%d",b);

          為什么?因為條件表達式的結(jié)果是一個值,要將這個值賦給一個變量或以一個值的形式輸出,而上面的形式表示的是,如果a>b為真,就將a以整型的形式輸出,否則將b以整型的形式輸出,而在實際編程過程中無法將其值輸出。

          表4-4-1 運算符及表達式總結(jié)表?



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();