亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    《C語(yǔ)言完全教程》第三章 基本運(yùn)算符和表達(dá)式

    第三章 基本運(yùn)算符和表達(dá)式

    運(yùn)算符的種類、優(yōu)先級(jí)和結(jié)合性
    C語(yǔ)言中運(yùn)算符和表達(dá)式數(shù)量之多, 在高級(jí)語(yǔ)言中是少見(jiàn)的。正是豐富的運(yùn)算符和表達(dá)式使C語(yǔ)言功能十分完善。 這也是C語(yǔ)言的主要特點(diǎn)之一。
    C語(yǔ)言的運(yùn)算符不僅具有不同的優(yōu)先級(jí), 而且還有一個(gè)特點(diǎn),就是它的結(jié)合性。在表達(dá)式中, 各運(yùn)算量參與運(yùn)算的先后順序不僅要遵守運(yùn)算符優(yōu)先級(jí)別的規(guī)定,還要受運(yùn)算符結(jié)合性的制約, 以便確定是自左向右進(jìn)行運(yùn)算還是自右向左進(jìn)行運(yùn)算。 這種結(jié)合性是其它高級(jí)語(yǔ)言的運(yùn)算符所沒(méi)有的,因此也增加了C語(yǔ)言的復(fù)雜性。

    運(yùn)算符的種類C語(yǔ)言的運(yùn)算符可分為以下幾類:
    1.算術(shù)運(yùn)算符
    用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(++)、自減(–)共七種。
    2.關(guān)系運(yùn)算符
    用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六種。
    3.邏輯運(yùn)算符
    用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。
    4.位操作運(yùn)算符
    參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
    5.賦值運(yùn)算符
    用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
    6.條件運(yùn)算符
    這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。
    7.逗號(hào)運(yùn)算符
    用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。
    8.指針運(yùn)算符
    用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。
    9.求字節(jié)數(shù)運(yùn)算符
    用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。
    10.特殊運(yùn)算符
    有括號(hào)(),下標(biāo)[],成員(→,.)等幾種。

    優(yōu)先級(jí)和結(jié)合性
    C語(yǔ)言中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15級(jí)。1級(jí)最高,15級(jí)最低。在表達(dá)式中,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的進(jìn)行運(yùn)算。 而在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí), 則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。 C語(yǔ)言中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。例如算術(shù)運(yùn)算符的結(jié)合性是自左至右,即先左后右。如有表達(dá)式x-y+z則y應(yīng)先與“-”號(hào)結(jié)合, 執(zhí)行x-y運(yùn)算,然后再執(zhí)行+z的運(yùn)算。這種自左至右的結(jié)合方向就稱為“左結(jié)合性”。而自右至左的結(jié)合方向稱為“右結(jié)合性”。 最典型的右結(jié)合性運(yùn)算符是賦值運(yùn)算符。如x=y=z,由于“=”的右結(jié)合性,應(yīng)先執(zhí)行y=z再執(zhí)行x=(y=z)運(yùn)算。 C語(yǔ)言運(yùn)算符中有不少為右結(jié)合性,應(yīng)注意區(qū)別,以避免理解錯(cuò)誤。

    算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本的算術(shù)運(yùn)算符
    1.加法運(yùn)算符“+”加法運(yùn)算符為雙目運(yùn)算符,即應(yīng)有兩個(gè)量參與加法運(yùn)算。如a+b,4+8等。具有右結(jié)合性。
    2.減法運(yùn)算符“-”減法運(yùn)算符為雙目運(yùn)算符。但“-”也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,如-x,-5等具有左結(jié)合性。
    3.乘法運(yùn)算符“*”雙目運(yùn)算,具有左結(jié)合性。
    4.除法運(yùn)算符“/”雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時(shí), 結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。
    void main(){
    printf(“nn%d,%dn”,20/7,-20/7);
    printf(“%f,%fn”,20.0/7,-20.0/7);
    }
    雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時(shí), 結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。 printf(“nn%d,%dn”,20/7,-20/7);
    printf(“%f,%fn”,20.0/7,-20.0/7);
    本例中,20/7,-20/7的結(jié)果均為整型,小數(shù)全部舍去。而20.0/7和-20.0/7由于有實(shí)數(shù)參與運(yùn)算,因此結(jié)果也為實(shí)型。
    5.求余運(yùn)算符(模運(yùn)算符)“%”雙目運(yùn)算,具有左結(jié)合性。要求參與運(yùn)算的量均為整型。 求余運(yùn)算的結(jié)果等于兩數(shù)相除后的余數(shù)。
    void main(){
    printf(“%dn”,100%3);
    }
    雙目運(yùn)算,具有左結(jié)合性。求余運(yùn)算符% 要求參與運(yùn)算的量均為整型。本例輸出100除以3所得的余數(shù)1。

    自增1,自減1運(yùn)算符
    自增1運(yùn)算符記為“++”,其功能是使變量的值自增1。自減1運(yùn)算符記為“–”,其功能是使變量值自減1。自增1,自減1運(yùn)算符均為單目運(yùn)算,都具有右結(jié)合性。可有以下幾種形式: ++i i自增1后再參與其它運(yùn)算。–i i自減1后再參與其它運(yùn)算。
    i++  i參與運(yùn)算后,i的值再自增1。
    i–  i參與運(yùn)算后,i的值再自減1。
    在理解和使用上容易出錯(cuò)的是i++和i–。 特別是當(dāng)它們出在較復(fù)雜的表達(dá)式或語(yǔ)句中時(shí),常常難于弄清,因此應(yīng)仔細(xì)分析。
    void main(){
    int i=8;
    printf(“%dn”,++i);
    printf(“%dn”,–i);
    printf(“%dn”,i++);
    printf(“%dn”,i–);
    printf(“%dn”,-i++);
    printf(“%dn”,-i–);
    } i<–8
    i<–i+1
    i<–i-1
    i<–i+1
    i<–i-1
    i<–i+1
    i<–i-1 int i=8;
    printf(“%dn”,++i);
    printf(“%dn”,–i);
    printf(“%dn”,i++);
    printf(“%dn”,i–);
    printf(“%dn”,-i++);
    printf(“%dn”,-i–);
    i的初值為8
    第2行i加1后輸出故為9;
    第3行減1后輸出故為8;
    第4行輸出i為8之后再加1(為9);
    第5行輸出i為9之后再減1(為8) ;
    第6行輸出-8之后再加1(為9);
    第7行輸出-9之后再減1(為8)
    void main(){
    int i=5,j=5,p,q;
    p=(i++)+(i++)+(i++);
    q=(++j)+(++j)+(++j);
    printf(“%d,%d,%d,%d”,p,q,i,j);
    }
    i<–5,j<–5,p<–0,q<–0
    i+i+i—>p,i+1–>i,i+1–>i,i+1–>i
    j+1->j,j+1->j,j+1->j,j+j+j->q int i=5,j=5,p,q;
    p=(i++)+(i++)+(i++);
    q=(++j)+(++j)+(++j);
    這個(gè)程序中,對(duì)P=(i++)+(i++)+(i++)應(yīng)理解為三個(gè)i相加,故P值為15。然后i再自增1三次相當(dāng)于加3故i的最后值為8。而對(duì)于q 的值則不然,q=(++j)+(++j)+(++j)應(yīng)理解為q先自增1,再參與運(yùn)算,由于q自增1三次后值為8,三個(gè)8相加的和為24,j的最后值仍為8。算術(shù)表達(dá)式表達(dá)式是由常量、變量、函數(shù)和運(yùn)算符組合起來(lái)的式子。 一個(gè)表達(dá)式有一個(gè)值及其類型, 它們等于計(jì)算表達(dá)式所得結(jié)果的值和類型。表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性規(guī)定的順序進(jìn)行。 單個(gè)的常量、變量、函數(shù)可以看作是表達(dá)式的特例。

    算術(shù)表達(dá)式
    是由算術(shù)運(yùn)算符和括號(hào)連接起來(lái)的式子, 以下是算術(shù)表達(dá)式的例子:
    a+b  (a*2)/c (x+r)*8-(a+b)/7  ++i sin(x)+sin(y)  (++i)-(j++)+(k–)

    賦值運(yùn)算符和賦值表達(dá)式
    簡(jiǎn)單賦值運(yùn)算符和表達(dá)式,簡(jiǎn)單賦值運(yùn)算符記為“=”。由“= ”連接的式子稱為賦值表達(dá)式。其一般形式為: 變量=表達(dá)式 例如:
    x=a+b
    w=sin(a)+sin(b)
    y=i+++–j 賦值表達(dá)式的功能是計(jì)算表達(dá)式的值再賦予左邊的變量。賦值運(yùn)算符具有右結(jié)合性。因此
    a=b=c=5
    可理解為
    a=(b=(c=5))
    在其它高級(jí)語(yǔ)言中,賦值構(gòu)成了一個(gè)語(yǔ)句,稱為賦值語(yǔ)句。 而在C中,把“=”定義為運(yùn)算符,從而組成賦值表達(dá)式。 凡是表達(dá)式可以出現(xiàn)的地方均可出現(xiàn)賦值表達(dá)式。例如,式子x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a(bǔ),b相加,和賦予x ,故x應(yīng)等于13。
    在C語(yǔ)言中也可以組成賦值語(yǔ)句,按照C語(yǔ)言規(guī)定, 任何表達(dá)式在其未尾加上分號(hào)就構(gòu)成為語(yǔ)句。因此如x=8;a=b=c=5;都是賦值語(yǔ)句,在前面各例中我們已大量使用過(guò)了。
    如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不相同, 系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換,即把賦值號(hào)右邊的類型換成左邊的類型。具體規(guī)定如下:
    1.實(shí)型賦予整型,舍去小數(shù)部分。前面的例2.9已經(jīng)說(shuō)明了這種情況。
    2.整型賦予實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放, 即增加小數(shù)部分(小數(shù)部分的值為0)。
    3.字符型賦予整型,由于字符型為一個(gè)字節(jié), 而整型為二個(gè)字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0。
    4.整型賦予字符型,只把低八位賦予字符量。
    void main(){
    int a,b=322;
    float x,y=8.88;
    char c1=’k’,c2;
    a=y;
    x=b;
    a=c1;
    c2=b;
    printf(“%d,%f,%d,%c”,a,x,a,c2);
    }
    int a,b=322;
    float x,y=8.88;
    char c1=’k’,c2;
    printf(“%d,%f,%d,%c”,a=y,x=b,a=c1,c2=b);
    本例表明了上述賦值運(yùn)算中類型轉(zhuǎn)換的規(guī)則。a為整型,賦予實(shí)型量y值888后只取整數(shù)8。x為實(shí)型,賦予整型量b值322, 后增加了小數(shù)部分。字符型量c1賦予a變?yōu)檎停土縝賦予c2 后取其低八位成為字符型(b的低八位為01000010,即十進(jìn)制66,按ASCII碼對(duì)應(yīng)于字符B)。

    復(fù)合賦值符及表達(dá)式
    在賦值符“=”之前加上其它二目運(yùn)算符可構(gòu)成復(fù)合賦值符。如
    +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。 構(gòu)成復(fù)合賦值表達(dá)式的一般形式為: 變量 雙目運(yùn)算符=表達(dá)式 它等效于 變量=變量 運(yùn)算符 表達(dá)式 例如: a+=5 等價(jià)于a=a+5  x*=y+7 等價(jià)于x=x*(y+7)  r%=p 等價(jià)于r=r%p
    復(fù)合賦值符這種寫法,對(duì)初學(xué)者可能不習(xí)慣, 但十分有利于編譯處理,能提高編譯效率并產(chǎn)生質(zhì)量較高的目標(biāo)代碼。逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式在

    逗號(hào)運(yùn)算符
    C語(yǔ)言中逗號(hào)“,”也是一種運(yùn)算符,稱為逗號(hào)運(yùn)算符。 其功能是把兩個(gè)表達(dá)式連接起來(lái)組成一個(gè)表達(dá)式, 稱為逗號(hào)表達(dá)式。
    其一般形式為: 表達(dá)式1,表達(dá)式2 其求值過(guò)程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號(hào)表達(dá)式的值。
    void main(){
    int a=2,b=4,c=6,x,y;
    y=(x=a+b),(b+c);
    printf(“y=%d,x=%d”,y,x);
    }
    a<–2,b<–4,c<–6,x<–0,y<–0
    x<–a+b,y<—b+c
    本例中,y等于整個(gè)逗號(hào)表達(dá)式的值,也就是表達(dá)式2的值,x是第一個(gè)表達(dá)式的值。對(duì)于逗號(hào)表達(dá)式還要說(shuō)明兩點(diǎn):
    1.逗號(hào)表達(dá)式一般形式中的表達(dá)式1和表達(dá)式2 也可以又是逗號(hào)表達(dá)式。例如: 表達(dá)式1,(表達(dá)式2,表達(dá)式3) 形成了嵌套情形。因此可以把逗號(hào)表達(dá)式擴(kuò)展為以下形式: 表達(dá)式1,表達(dá)式2,…表達(dá)式n 整個(gè)逗號(hào)表達(dá)式的值等于表達(dá)式n的值。
    2.程序中使用逗號(hào)表達(dá)式,通常是要分別求逗號(hào)表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號(hào)表達(dá)式的值。
    3.并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式,如在變量說(shuō)明中,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。
    [Practice] //arithmeticint a,b,c;
    float d;
    a=11;
    b=235;
    c=a+b-a*b;
    d=(float)c/(float)a;
    a=c/a;’Vtable
    a,2,0
    b,2,0
    c,2,0
    d,4,0.0
    of Vtable
    ‘Vupdate
    1,0;2,0;3,0
    4,0.0
    1,11
    2,235
    3,-2339
    4,-212.636368
    1,-212
    of Vupdate
    of Practice
    [Practice] //1int a,b,c1,c2;
    a=25;
    b=3243;
    c1=b/a;
    c2=b%a;’Vtable
    a,2,0
    b,2,0
    c1,2,0
    c2,2,0
    of Vtable
    ‘Vupdate
    1,0;2,0;3,0;4,0
    1,25
    2,3243
    3,129
    4,18
    of Vupdate
    of Practice
    [Practice] //1int a,b,c;
    a=25;
    b=40;
    c=a+b,c+35;’Vtable
    a,2,0
    b,2,0
    c,2,0
    of Vtable
    ‘Vupdate
    1,0;2,0;3,0
    1,25
    2,40
    3,65
    of Vupdate
    of Practice

    小結(jié)

    1.C的數(shù)據(jù)類型
    基本類型,構(gòu)造類型,指針類型,空類型
    2.基本類型的分類及特點(diǎn)
    類型說(shuō)明符      字節(jié)       數(shù)值范圍
    字符型char        1        C字符集
    基本整型int       2        -32768~32767
    短整型short int     2         -32768~32767
    長(zhǎng)整型 long int     4      -214783648~214783647
    無(wú)符號(hào)型 unsigned    2        0~65535
    無(wú)符號(hào)長(zhǎng)整型 unsigned long 4      0~4294967295
    單精度實(shí)型 float    4       3/4E-38~3/4E+38
    雙精度實(shí)型 double   8       1/7E-308~1/7E+308
    3.常量后綴
    L或l 長(zhǎng)整型
    U或u 無(wú)符號(hào)數(shù)
    F或f 浮點(diǎn)數(shù)
    4.常量類型
    整數(shù),長(zhǎng)整數(shù),無(wú)符號(hào)數(shù),浮點(diǎn)數(shù),字符,字符串,符號(hào)常數(shù),轉(zhuǎn)義字符。
    5.數(shù)據(jù)類型轉(zhuǎn)換
    ·自動(dòng)轉(zhuǎn)換
    在不同類型數(shù)據(jù)的混合運(yùn)算中,由系統(tǒng)自動(dòng)實(shí)現(xiàn)轉(zhuǎn)換, 由少字節(jié)類型向多字節(jié)類型轉(zhuǎn)換。 不同類型的量相互賦值時(shí)也由系統(tǒng)自動(dòng)進(jìn)行轉(zhuǎn)換,把賦值號(hào)右邊的類型轉(zhuǎn)換為左邊的類型。
    ·強(qiáng)制轉(zhuǎn)換
    由強(qiáng)制轉(zhuǎn)換運(yùn)算符完成轉(zhuǎn)換。
    6.運(yùn)算符優(yōu)先級(jí)和結(jié)合性
    一般而言,單目運(yùn)算符優(yōu)先級(jí)較高,賦值運(yùn)算符優(yōu)先級(jí)低。 算術(shù)運(yùn)算符優(yōu)先級(jí)較高,關(guān)系和邏輯運(yùn)算符優(yōu)先級(jí)較低。 多數(shù)運(yùn)算符具有左結(jié)合性,單目運(yùn)算符、三目運(yùn)算符、 賦值
    7.表達(dá)式
    表達(dá)式是由運(yùn)算符連接常量、變量、函數(shù)所組成的式子。 每個(gè)表達(dá)式都有一個(gè)值和類型。 表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性所規(guī)定的順序進(jìn)行。

     

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)