版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
§2.3
運(yùn)算符和表達(dá)式
2.3.1
表達(dá)式
2.3.2算術(shù)運(yùn)算符2.3.3賦值運(yùn)算符2.3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算2.3.5關(guān)系運(yùn)算符2.3.6邏輯運(yùn)算符2.3.7增1/減1運(yùn)算符2.3.8位邏輯運(yùn)算符2.3.9其它運(yùn)算符3.1表達(dá)式表達(dá)式的概念表達(dá)式是用運(yùn)算符與圓括號(hào)將操作數(shù)連接起來(lái)所構(gòu)成的式子。C語(yǔ)言的操作數(shù)包括常量、變量、函數(shù)值等。
根據(jù)表達(dá)式進(jìn)行運(yùn)算,得到的數(shù)值即為表達(dá)式的解。
表達(dá)式與簡(jiǎn)單語(yǔ)句在C語(yǔ)言中,在一個(gè)表達(dá)式的后面加上分號(hào)“;”就構(gòu)成了簡(jiǎn)單語(yǔ)句。
有意義的簡(jiǎn)單語(yǔ)句
無(wú)意義的簡(jiǎn)單語(yǔ)句
3.2算術(shù)運(yùn)算符
種類及運(yùn)算+-*/%注意:
兩個(gè)整數(shù)相除,結(jié)果仍為整數(shù),商向下取整。取模運(yùn)算符%實(shí)際上是數(shù)學(xué)運(yùn)算的求余數(shù)運(yùn)算,其兩個(gè)操作對(duì)象都必須是整數(shù)。減法運(yùn)算符還可以用做單目運(yùn)算符,是取負(fù)運(yùn)算。其余操作符均為雙目運(yùn)算符。
算術(shù)表達(dá)式及算術(shù)運(yùn)算符的優(yōu)先級(jí)
算術(shù)表達(dá)式就是用算術(shù)運(yùn)算符和圓括號(hào)將操作數(shù)連接起來(lái)的式子。算術(shù)表達(dá)式的解就是經(jīng)過算術(shù)運(yùn)算得到的表達(dá)式的值。算術(shù)運(yùn)算符的優(yōu)先級(jí)與數(shù)學(xué)基本相同,即先乘除,后加減。取模運(yùn)算的優(yōu)先級(jí)與乘除相同。函數(shù)和圓括號(hào)的優(yōu)先級(jí)最高。
注意:
算術(shù)表達(dá)式應(yīng)能正確的表達(dá)數(shù)學(xué)公式。例如:數(shù)學(xué)表達(dá)式是3+x
2a
相應(yīng)的C語(yǔ)言表達(dá)式應(yīng)該是什么呢?算術(shù)表達(dá)式的結(jié)果應(yīng)該不超過其所能表示的數(shù)的范圍。例如,最大的整型數(shù)是32767,那么,32767+3就不會(huì)是正確的結(jié)果。而
32767L+3的結(jié)果是正確的,因?yàn)?2767L是長(zhǎng)整型數(shù)。算術(shù)運(yùn)算符的結(jié)合性
運(yùn)算符的結(jié)合性是指如果一個(gè)操作數(shù)左邊和右邊的兩個(gè)運(yùn)算符的優(yōu)先級(jí)相同,應(yīng)該優(yōu)先計(jì)算的操作符。例如:a+b-c
操作數(shù)b左右的運(yùn)算符+和-的優(yōu)先級(jí)相同,那么,是先計(jì)算b-c,還是先計(jì)算a+b呢?C語(yǔ)言規(guī)定雙目算術(shù)運(yùn)算符的結(jié)合性是自左至右,也就是b先與左邊a結(jié)合,再與右邊c結(jié)合。所以是先計(jì)算a+b,然后用a+b的結(jié)果減c。
雙目運(yùn)算符的結(jié)合性與數(shù)學(xué)運(yùn)算并無(wú)不同。3.3賦值運(yùn)算符
普通賦值運(yùn)算符
賦值表達(dá)式的一般形式是:變量名=表達(dá)式賦值語(yǔ)句的一般形式是:變量名=表達(dá)式;
賦值運(yùn)算符的優(yōu)先級(jí)小于算術(shù)運(yùn)算符。賦值運(yùn)算符的結(jié)合性是自右至左,
以a=b=2為例
復(fù)合賦值運(yùn)算符
把賦值運(yùn)算符與算術(shù)、位邏輯、移位運(yùn)算符放在一起,就構(gòu)成復(fù)合賦值運(yùn)算符。復(fù)合算術(shù)賦值運(yùn)算符有5個(gè)+=、-=、*=、/=、%=。還有與移位和位邏輯結(jié)合的復(fù)合賦值運(yùn)算符5個(gè)(<<=、>>=、&=、^=、|=)。
復(fù)合賦值運(yùn)算符的使用規(guī)則是:Xop=Y與X=XopY等價(jià)。3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算
自動(dòng)轉(zhuǎn)換
強(qiáng)制轉(zhuǎn)換
賦值表達(dá)式的類型轉(zhuǎn)換自動(dòng)轉(zhuǎn)換
所謂“自動(dòng)轉(zhuǎn)換”就是系統(tǒng)根據(jù)規(guī)則自動(dòng)將兩個(gè)不同數(shù)據(jù)類型的運(yùn)算對(duì)象轉(zhuǎn)換成同一種數(shù)據(jù)類型的過程。而且,對(duì)某些數(shù)據(jù)類型,即使是兩個(gè)運(yùn)算對(duì)象的數(shù)據(jù)類型完全相同,也要做轉(zhuǎn)換,例如float。強(qiáng)制轉(zhuǎn)換
在C語(yǔ)言中,允許程序員根據(jù)自己的意愿將一種數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換成另一種數(shù)據(jù)類型。強(qiáng)制轉(zhuǎn)換的格式為:
(數(shù)據(jù)類型名)操作對(duì)象注意,強(qiáng)制轉(zhuǎn)換并不改變操作對(duì)象的數(shù)據(jù)類型和數(shù)值。例如,(int)f的確切含義是將f轉(zhuǎn)換成為整型值參與運(yùn)算,而f本身的數(shù)據(jù)類型和數(shù)值都沒有任何改變。賦值表達(dá)式的類型轉(zhuǎn)換當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類型相同時(shí),不需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類型不相同時(shí),系統(tǒng)負(fù)責(zé)將右邊的數(shù)據(jù)類型轉(zhuǎn)換成左邊的數(shù)據(jù)類型。此時(shí),會(huì)有兩種情況產(chǎn)生,一種是轉(zhuǎn)換以后會(huì)丟失數(shù)據(jù),另一種是轉(zhuǎn)換以后不會(huì)丟失數(shù)據(jù)。這與賦值號(hào)兩邊的表達(dá)式的數(shù)據(jù)類型所占的字節(jié)數(shù)及存儲(chǔ)表示方式有關(guān)。(詳細(xì)內(nèi)容自學(xué))例3.1#include"stdio.h"voidmain(){intc;/*charc;*/c='B';printf("c=%c",c+'a'-'A');}
運(yùn)行結(jié)果:c=b例3.2#include"stdio.h"voidmain(){charc;
inti=0x3241;
printf("i=%c\n",i);c=i;
printf("c=%d\n",c);
printf("i=%d\n",i);}運(yùn)行結(jié)果i=Ac=65i=128653.5關(guān)系運(yùn)算符所謂關(guān)系運(yùn)算,實(shí)際上就是比較兩個(gè)數(shù)值的大小。那么,比較兩個(gè)數(shù)值的大小的運(yùn)算符就是關(guān)系運(yùn)算符。關(guān)系運(yùn)算符有六個(gè)>、>=、<、<=、==、!=。由關(guān)系運(yùn)算符連接起來(lái)的表達(dá)式就是關(guān)系表達(dá)式。關(guān)系表達(dá)式的解一般應(yīng)為真或假,C語(yǔ)言用整數(shù)1表示真,整數(shù)0表示假。
初學(xué)者經(jīng)常會(huì)混淆關(guān)系運(yùn)算符“==”和賦值運(yùn)算符“=”,因此要注意區(qū)分這兩個(gè)運(yùn)算符。例3.3#include"stdio.h"voidmain(){
intx,y,z1,z2;x=2;y=2;z1=(x=y);z2=(x==y);
printf("%d,%d\n",z1,z2);}六個(gè)關(guān)系運(yùn)算符中的“!=”和“==”的優(yōu)先級(jí)小于其余四個(gè)運(yùn)算符。
關(guān)系運(yùn)算符的優(yōu)先級(jí)小于算術(shù)運(yùn)算符,大于賦值運(yùn)算符。關(guān)系運(yùn)算符的結(jié)合性均為自左至右。
當(dāng)多種運(yùn)算符在一個(gè)表達(dá)式中同時(shí)使用時(shí),要注意運(yùn)算符的優(yōu)先級(jí),防止記錯(cuò)運(yùn)算符優(yōu)先級(jí)的最好方法是加圓括號(hào)。
例3.4注意,不贊成按本例這樣編寫程序。#include"stdio.h"voidmain(){
intx,y,z,i,j;x=4,y=3,z=2;i=y>z;j=x>y>z;
printf("%2d,%2d,",i,j);
printf("%2d,",z>y==3);
printf("%2d,",y+z<x);
printf("%2d\n",y+2>=z+1);}運(yùn)行結(jié)果為:1,0,0,0,13.6邏輯運(yùn)算符
如果將“與、或、非”運(yùn)算應(yīng)用于邏輯值(邏輯真和邏輯假)則稱為邏輯運(yùn)算。
C語(yǔ)言中的邏輯運(yùn)算符有三個(gè):邏輯與&&、邏輯或||和邏輯非!
其中邏輯與和邏輯或是雙目運(yùn)算符,而邏輯非是單目運(yùn)算符。邏輯運(yùn)算的規(guī)則與二進(jìn)制的位邏輯是相似的。邏輯運(yùn)算的規(guī)則下表:
C語(yǔ)言系統(tǒng)對(duì)任何非0值都認(rèn)定為是邏輯真,而將0認(rèn)定為邏輯假。如果一個(gè)表達(dá)式參與邏輯運(yùn)算,只要這個(gè)表達(dá)式的解為非0,則系統(tǒng)就認(rèn)為這個(gè)表達(dá)式的結(jié)果是邏輯真。但是要注意,系統(tǒng)邏輯運(yùn)算的結(jié)果仍然只有兩個(gè):1(邏輯真)和0(邏輯假)。
邏輯運(yùn)算符經(jīng)常與關(guān)系運(yùn)算符一起使用。
C語(yǔ)言表達(dá)式(x>=10)&&(x<=100)的數(shù)學(xué)含義是:10≤x≤100
邏輯運(yùn)算符的優(yōu)先級(jí)!&&||高低!的優(yōu)先級(jí)高于算術(shù)運(yùn)算符(當(dāng)然也高于關(guān)系運(yùn)算符)和賦值運(yùn)算符
&&和||的優(yōu)先級(jí)高于賦值運(yùn)算符,但是低于算術(shù)運(yùn)算符和關(guān)系運(yùn)算符。!單目運(yùn)算符,其結(jié)合性是自右至左;&&和||的結(jié)合性是自左至右。
計(jì)算表達(dá)式7<8&&3||6>9-!0的值
注意:在C語(yǔ)言中,如果邏輯運(yùn)算符的左操作數(shù)已經(jīng)能夠確定表達(dá)式的解,則系統(tǒng)不再計(jì)算右操作數(shù)的值。
x==1&&y==0
若x此時(shí)不為1,在檢測(cè)x==1以后,就不會(huì)再檢測(cè)y==0。因?yàn)閤==1的結(jié)果是邏輯假,邏輯假與任何數(shù)進(jìn)行邏輯與操作結(jié)果都會(huì)是邏輯假。
x==y||x=0
若x==y成立,則表達(dá)式的值為真,不需要繼續(xù)做x=0了。但是,若x==y不成立,由于x=0是個(gè)賦值表達(dá)式,表達(dá)式的結(jié)果很可能是錯(cuò)誤的。假設(shè)該表達(dá)式計(jì)算以前,x值為1,y的值為0,x==y的計(jì)算結(jié)果是0,這時(shí)需要執(zhí)行賦值x=0,表達(dá)式的結(jié)果仍然是0,而實(shí)際上這時(shí)的x和y的值均為0,又滿足了x==y,這不是產(chǎn)生了矛盾嗎?不要在一般的表達(dá)式中夾雜賦值運(yùn)算3.7增1/減1運(yùn)算符
++和--。這兩個(gè)運(yùn)算符都是單目運(yùn)算符,其功能分別是將變量自身的內(nèi)容增1和減1。++i和--i是前綴表示法,i++和i--是后綴表示法。如果直接在++i和i++的后面加上分號(hào)構(gòu)成C的執(zhí)行語(yǔ)句,即++i;和i++;前綴與后綴并無(wú)區(qū)別(減1符號(hào)也一樣)。但是,將它們用在表達(dá)式中則前綴與后綴是有區(qū)別的。前綴表示法是先將i值增/減1,再在表達(dá)式中使用;而后綴表示法是先在表達(dá)式中使用i的值,再將i值增/減1。例如:i=3;i=3;j=i++;
j=++i;
結(jié)果j的內(nèi)容為3j的內(nèi)容為4
i的內(nèi)容為4i的內(nèi)容為4
注意:
增1/減1運(yùn)算符的操作對(duì)象是一個(gè)變量2++、--2以及(x/y)++均為非法增1/減1運(yùn)算符的優(yōu)先級(jí)高于算術(shù)運(yùn)算符,與單目運(yùn)算符-(取負(fù))、?。ㄟ壿嫹牵┑膬?yōu)先級(jí)相同,結(jié)合方向自右至左。例如表達(dá)式-i++等價(jià)于-(i++)副作用:printf(“%d,%d”,i,i++);在不同的編譯環(huán)境下結(jié)果有可能不同。盡量不要在一般的表達(dá)式中將增1/減1運(yùn)算符與其它運(yùn)算符混合使用。3.8位邏輯運(yùn)算符~<<>>&|^按位取反左移右移按位與按位或按位異或操作數(shù)在實(shí)現(xiàn)位操作時(shí)按二進(jìn)制進(jìn)行運(yùn)算,7一般應(yīng)為無(wú)符號(hào)型整數(shù)。
按位與&
按位與的運(yùn)算規(guī)則是:0&0=00&1=01&0=01&1=1例如:charw1,w2,w3;w1=10;w2=8;w3=w1&w2;w3的內(nèi)容可以通過下式運(yùn)算:0000101000001000(按位與&)00001000(結(jié)果)
&運(yùn)算經(jīng)常用于把特定位清零(屏蔽)。例如,
a的值為11011010,b的值為11110000,
a&b11011010&1111000011010000
相當(dāng)于把a(bǔ)的低4位屏蔽,高4位不變。
按位或|按位或的運(yùn)算規(guī)則是:0|0=00|1=11|0=11|1=1例如:charw1,w2,w3;w1=10;w2=8;w3=w1|w2;w3的內(nèi)容可以通過下式運(yùn)算:0000101000001000(按位或|)00001010(結(jié)果)按位異或^按位或的運(yùn)算規(guī)則是:0^0=00^1=11^0=11^1=0例如:charw1,w2,w3;w1=10;w2=8;w3=w1^w2;w3的內(nèi)容可以通過下式運(yùn)算:0000101000001000(按位異或^)
00000010(結(jié)果)按位取反~按位取反的規(guī)則是:~0=1~1=0注意:對(duì)于位邏輯反來(lái)說(shuō),~0x7在16位機(jī)上的表示是1111111111111000即0xfff8,但在32位機(jī)上的表示是0xfffffff8,所以通常用~0x7來(lái)表示7的邏輯非,而不用0xfff8或oxfffffff8。移位運(yùn)算符
左移<<右移>>雙目運(yùn)算符,運(yùn)算符右邊的表達(dá)式表示移位的位數(shù)。
x=x<<2表示把x進(jìn)行左移以后賦值給x,注意不能只用x<<2
左移可以擴(kuò)大原數(shù)的倍數(shù),左移1位擴(kuò)大2倍,左移2位擴(kuò)大4倍,…。右移可以縮小原數(shù)的倍數(shù)。右移時(shí),若符號(hào)位為0,則右邊填零。若符號(hào)位為1,根據(jù)機(jī)器不同分為算術(shù)移位(填充1)邏輯移位(填充0)。3.9其它運(yùn)算符逗號(hào)運(yùn)算符表達(dá)式1,表達(dá)式2逗號(hào)表達(dá)式的求值過程是:先求解表達(dá)式1,再求解表達(dá)式2,并將表達(dá)式2的解作為逗號(hào)表達(dá)式的解。例如5,6的值是6
z=(y=3,x*y)與z=x*(y=3)是等價(jià)的逗號(hào)運(yùn)算符一般用于循環(huán)for語(yǔ)句,不提倡使用在其它的表達(dá)式中。
求字節(jié)數(shù)運(yùn)算符
sizeof是一個(gè)比較特殊的單目運(yùn)算符,也是一個(gè)非常有用的運(yùn)算符,經(jīng)常用于動(dòng)態(tài)分配空間。其語(yǔ)法格式為:
sizeof(表達(dá)式)表達(dá)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《磨床操作知識(shí)》課件
- 工業(yè)機(jī)器人模擬題含參考答案
- 養(yǎng)老院老人生活?yuàn)蕵坊顒?dòng)組織人員管理制度
- 養(yǎng)老院老人家屬溝通聯(lián)系制度
- 《離散PID控制器》課件
- 2024年水電工程綠化養(yǎng)護(hù)合同范本3篇
- 授權(quán)委托書保證協(xié)議書(2篇)
- 《人力資源考核手冊(cè)》課件
- 2025年齊齊哈爾貨運(yùn)從業(yè)資格仿真考題
- 2025年宣城道路貨運(yùn)駕駛員從業(yè)資格證考試題庫(kù)完整
- 設(shè)備部常用維修工具使用課件
- 重大事故隱患檢查表
- 公路工程資料整理
- 頂管工程施工中的施工質(zhì)量控制
- 廣東省廣州市白云區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題
- 牛仔褲項(xiàng)目商業(yè)計(jì)劃書
- 《美術(shù)的主要分類》課件
- 建立兒童獨(dú)立性的培養(yǎng)
- 《晶體缺陷》課件
- 國(guó)開電大本科《理工英語(yǔ)4》機(jī)考總題庫(kù)2023年秋期考試版
- 2024年內(nèi)蒙古包鋼集團(tuán)招聘筆試參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論