版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第2章數(shù)據(jù)類型、運(yùn)算符
和表達(dá)式C語言程序設(shè)計(jì)主講教師:祝建華2
《C語言程序設(shè)計(jì)》是計(jì)算機(jī)科學(xué)與技術(shù)類各專業(yè)的一門基礎(chǔ)課程。
本章主要介紹表達(dá)式,它是程序設(shè)計(jì)核心內(nèi)容之一。重點(diǎn)討論了數(shù)據(jù)類型、運(yùn)算符和表達(dá)式等基本概念以及它們之間的相互關(guān)系。核心內(nèi)容是高級(jí)語言單詞的種類與構(gòu)詞規(guī)則、數(shù)據(jù)分類與數(shù)據(jù)類型、常量與變量的說明、基本運(yùn)算與表達(dá)式和不同類型數(shù)據(jù)的轉(zhuǎn)換規(guī)則。內(nèi)容摘要3重點(diǎn)講解2.1字符及詞法元素2.2語法規(guī)則2.3標(biāo)識(shí)符、關(guān)鍵字及分隔符2.4基本數(shù)據(jù)類型2.5常量與變量2.6運(yùn)算符和表達(dá)式2.7位運(yùn)算和位表達(dá)式2.8類型轉(zhuǎn)換2.9枚舉類型2.10*
新增數(shù)據(jù)類型小結(jié)42.1.1
字符集目錄2.1
字符及詞法元素
按照語言結(jié)構(gòu)的角度,語言表達(dá)的基本形式是句子,句子是由單詞依據(jù)句法規(guī)則構(gòu)成的,單詞是由語言的基本符號(hào)依據(jù)詞法規(guī)則組成的。語言基本符號(hào)的集合,稱為字符集。
英文字母:a~z和A~Z數(shù)字字符:0~9特殊字符:!"#%&'()*+,-./:;<>=?[]\^_{}|~空白字符:空格、換行符、水平制表符(HT)、垂直制表符(VT)、換頁符(FF)C語言的字符集是7位ASCII碼的子集,組成如下:5
sum=x+ysum=x+ysum=x+ysum=x+y2.1.2
詞法元素
C語言中單詞,共分5類:標(biāo)識(shí)符、關(guān)鍵字、常量、運(yùn)算符和定界符(標(biāo)點(diǎn)符號(hào))。
例2.1sum=x+y
該表達(dá)式,共5個(gè)單詞sum、=、x、+和y。5556
例2.2inta,b=10;
該語句,共7個(gè)單詞int、a、,、b、=、10和;。
例2.3+++++y
該表達(dá)式,共4個(gè)單詞++、++、+和y。⑴按單詞種類和詞法規(guī)則區(qū)分單詞;⑵空格符起到單詞間隔和排版之作用;⑶回車符起到單詞間隔和換行之作用;6
{}----括起來的部分重復(fù)0次或多次。
[]----括起來的部分出現(xiàn)0次或1次。
()----表示結(jié)成一組。2.2語法規(guī)則2.2.1
BNF范式
2.2.2
EBNF范式
2.2.3
語法圖
<實(shí)數(shù)>::=<整數(shù)部分>.<小數(shù)部分>|.<小數(shù)部分>
<實(shí)數(shù)>::=[<整數(shù)部分>].<小數(shù)部分>標(biāo)識(shí)符字母字母數(shù)字目錄72.3標(biāo)識(shí)符、關(guān)鍵字及分隔符2.3.1
標(biāo)識(shí)符
標(biāo)識(shí)符是以字母或下劃線開頭的、由字母、數(shù)字和下劃線符號(hào)組成符號(hào)序列。標(biāo)識(shí)符字母下劃線字母下劃線數(shù)字
標(biāo)識(shí)符K_idx_coordtime1
非標(biāo)識(shí)符20_sum(不能以數(shù)字開頭)
not#me(特殊符號(hào)#不是組成字符)
C語言中是區(qū)別大小寫字母的。Time和time以是不同的兩個(gè)標(biāo)識(shí)符。標(biāo)識(shí)符一般標(biāo)識(shí)符關(guān)鍵字
程序員構(gòu)造使用的標(biāo)識(shí)符,其詞義由說明語句給出。
C語言保留使用的標(biāo)識(shí)符,其詞義由C語言預(yù)先約定。目錄8auto_Bool*breakcasechar_Complex*constcontinuedefaultrestrict*dodoubleelseenumexternfloatforgotoif_Imaginary*inline*intlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatileWhile2.3.2
關(guān)鍵字
關(guān)鍵字也稱作保留字,是被系統(tǒng)賦予特定含義并有專門用途的標(biāo)識(shí)符,程序員不能作為一般標(biāo)識(shí)符使用。表2.2標(biāo)準(zhǔn)C的關(guān)鍵字2.3.3
分隔符
分隔符統(tǒng)稱為空白字符,包括空格符、制表符、換行符、換頁符及注釋符,它們在語法上僅起分隔單詞的作用。
當(dāng)程序中兩個(gè)相鄰的單詞之間不用分隔符就不能將兩者區(qū)分開時(shí)則必須加分隔符(通常用空格符)。為了使程序更加清晰,便于閱讀,任何單詞之間都可以加適當(dāng)空格符。例如,intx,y;不能寫成intx,y;92.4基本數(shù)據(jù)類型2.4.1
基本類型的分類表2.3C語言類型與類別C語言類型類型分類short,int,long,longlong
#
(signed和unsigned)Char(signed和unsigned)_Bool
#enum{…}整型基本類型float,double,longdouble_Complex
#,_Imaginary
#浮點(diǎn)型復(fù)數(shù)類型T*T[…]struct{…}union{…}指針類型數(shù)組類型結(jié)構(gòu)類型聯(lián)合類型導(dǎo)出類型void空類型目錄10
數(shù)據(jù)類型是由編譯系統(tǒng)實(shí)現(xiàn)了的數(shù)據(jù)結(jié)構(gòu)。它的基本目的和作用如下:⑴確定數(shù)據(jù)的邏輯分類;⑵確定數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。2.4.2
基本類型的名字《數(shù)據(jù)結(jié)構(gòu)》自然數(shù)無理數(shù)實(shí)數(shù)復(fù)數(shù)整數(shù)有理數(shù)數(shù)學(xué)的數(shù)分類:0和負(fù)數(shù)分?jǐn)?shù)、有限循環(huán)小數(shù)無限循環(huán)小數(shù)虛數(shù)機(jī)器的數(shù)分類:浮點(diǎn)數(shù)定點(diǎn)數(shù)非數(shù)值之?dāng)?shù)據(jù)數(shù)字化編碼技術(shù)存儲(chǔ)二進(jìn)制位數(shù)
數(shù)據(jù)類型是恰當(dāng)反映了數(shù)據(jù)的邏輯和物理兩個(gè)因素之結(jié)果!112.4.2
基本類型的名字charintfloatdoublelongdoublesignedcharunsignedcharsignedintunsignedintsignedlongintsignedshortintsignedintunsignedlongintunsignedshortintunsignedint字符類型整型類型浮點(diǎn)類型定點(diǎn)數(shù)浮點(diǎn)數(shù)122.4.3
字符類型0000000000000001000000100000001100000100111111110111111110000000…1000000110000010100000111000010011111110…01234255127128…129130131132254…01234-1127-128…-127-126-125-124-2…完整類型名簡寫類型名字節(jié)長度值域charsignedcharunsignedcharcharsignedcharunsignedchar111有符號(hào):-128~127無符號(hào):0~255-128~1270~255字符類型存儲(chǔ)長度統(tǒng)一為1個(gè)字節(jié)。signed和unsigned定義最高位是否為符號(hào)位。char是有符號(hào)還是無符號(hào)機(jī)器有關(guān),通常char與signedchar是同一類型。132.4.4
整型類型完整類型名簡寫類型名長度值域signedintunsignedintsignedshortintsignedlongintunsignedshortintunsignedlongintintunsignedshortlongunsignedshortunsignedlong2或42或42424242字節(jié):-32768~327674字節(jié):-2147483648~21474836472字節(jié):0~655354字節(jié):0~4294967295-32768~32767-2147483648~21474836470~655350~4294967295
如果超出類型值域的數(shù)被存儲(chǔ)在同類型的存儲(chǔ)單元,或者運(yùn)算的結(jié)果超出類型值域,會(huì)導(dǎo)致計(jì)算錯(cuò)誤!這種情況,稱為溢出。0[]下溢出上溢出14目錄2.4.5
浮點(diǎn)類型(IEEE754標(biāo)準(zhǔn))
一個(gè)二進(jìn)制浮點(diǎn)數(shù)V可表示成帶符號(hào)的m乘以基b的指數(shù)x次冪,即:
V=(-1)s×M×2E其中:s表示符號(hào)位(0/1),1≤M<2,M稱為尾數(shù),E為指數(shù)。1010.1(2)=1.0101×23IEEE754標(biāo)準(zhǔn)形式[-10.0(10)]
=[-1.01(2)×211(2)]
=
11000001
0010000000000000000000003130…23
22
…
1
0
指數(shù)+127尾數(shù)
指數(shù)采用移碼存儲(chǔ)尾數(shù)整數(shù)部分的1不保存23bit8bit152.4.5
浮點(diǎn)類型(IEEE754標(biāo)準(zhǔn))特殊值:(1)如果指數(shù)是0并且尾數(shù)的小數(shù)部分是0,這個(gè)數(shù)±0(和符號(hào)位相關(guān))(2)如果指數(shù)
=2e-1,
即指數(shù)部分所有位全部是1,并且尾數(shù)的小數(shù)部分是0,這個(gè)數(shù)是±∞(同樣和符號(hào)位相關(guān),這里e是指數(shù)的位數(shù),如上頁例中e等于8)(3)如果指數(shù)
=2e-1,
并且尾數(shù)的小數(shù)部分非0,這個(gè)數(shù)表示為不是一個(gè)數(shù)(NAN)。64位的浮點(diǎn)數(shù),符號(hào)1位,指數(shù)11位,尾數(shù)52位,指數(shù)偏移量為1023。16完整類型名簡寫類型名長度值域floatdoublelongdoublefloatdoublelongdouble48≥8|1.175e-38|~|1.7e+38||2.2e-308|~|1.799e+308|由具體實(shí)現(xiàn)定義2.4.5
浮點(diǎn)類型
如果超出類型值域的數(shù)被存儲(chǔ)在同類型的存儲(chǔ)單元,或者運(yùn)算的結(jié)果超出類型值域,會(huì)導(dǎo)致計(jì)算錯(cuò)誤!這種情況,稱為溢出。
類型值域的數(shù)是離散值,即理論上在類型值域的數(shù),實(shí)際上可能是其近似值。0[][]溢出區(qū)域172.5常量與變量2.5.1
文字常量C有4種類型的常量:整型、浮點(diǎn)型、字符型和字符串型。常量的數(shù)值和類型從其文字書寫格式即可判別。下面介紹基本類型常量的書寫格式.1.整型常量十進(jìn)制無八進(jìn)制0十六進(jìn)制0x或0X前綴unsignedu
或Ulongl
或Lunsignedlongul
或ULlonglong(C99)
ll
或LLunsignedlonglong(C99)ull或ULLint無后綴0XFUL(=1510,數(shù)據(jù)類型是unsignedlong,4byte)
0314(=20410)√314√0678×目錄182.浮點(diǎn)常量通常帶小數(shù)點(diǎn)的十進(jìn)制數(shù)形式
指數(shù)形式,即科學(xué)計(jì)數(shù)法:R
e±n
=R×10±nfloatf
或Fdouble無
longdoublel
或L后綴
合法非法1.f4byteE+108byte1.2e-123L≥8byte10e1.58byte10E10L≥8byte1.2eF4byte314314.0
int
double193.字符常量
字符常量寫成用一對(duì)單引號(hào)括住單個(gè)字符的形式:‘圖形字符‘或‘轉(zhuǎn)義字‘
這里,一對(duì)單引號(hào)是字符常量的標(biāo)志,稱為定界符。字符常量是一個(gè)整數(shù),其值為該字符在ASCII中的字符碼。表2.5轉(zhuǎn)義序列轉(zhuǎn)義序列ASCII碼字符轉(zhuǎn)義序列ASCII碼字符\0\a\b\t\n\v\f0789101112空字符響鈴符退格符水平制表符換行符垂直制表符換頁符\r\"\'\?\\\ooo\xh2550~255回車符雙引號(hào)單引號(hào)問號(hào)反斜線八進(jìn)制數(shù)十六進(jìn)制數(shù)
(1)單引號(hào)(')和反斜線(\)雖然是圖形符號(hào),但作為字符常量時(shí)必須用轉(zhuǎn)義序列。如'\'和'\\'是合法的,而'''和'\'是非法的。
(2)雙引號(hào)(")作為字符常量時(shí)既可用圖形符號(hào)也可用轉(zhuǎn)義序列表示。如'"'和'\"'均合法。204.字符串常量字符串常量寫成用一對(duì)雙引號(hào)括住0至多個(gè)字符的形式:"字符序列"這對(duì)雙引號(hào)是字符串的定界符,不是字符串的組成部分。字符串的組成字符可以是圖形符號(hào)也可以是轉(zhuǎn)義序列。
"Iamastring\n“"""3'40\"""c:\tc""c:\\tc"C的語法規(guī)定,在程序中書寫字符串時(shí)不能直接中途換行。
行連接的方法是:在前一行的末尾輸入反斜線(\)再換行,這里反斜線是續(xù)行符,可以將多行合并成一行。
"Hello,howareyou""Hello,\howareyou"×√
符號(hào)串的存儲(chǔ)長度是符號(hào)串所含符號(hào)的個(gè)數(shù)加1個(gè)字節(jié)。"world"
world\0存儲(chǔ)結(jié)構(gòu)212.5.2
符號(hào)常量
表示一個(gè)常量的標(biāo)識(shí)符,就是符號(hào)常量。C語言中有三種定義符號(hào)常量的方法:(1)用#define指令定義一個(gè)符號(hào)常量(2)用const聲明語句定義一個(gè)符號(hào)常量(3)用枚舉類型定義一組符號(hào)常量(在2.10節(jié)介紹)#defineLOWER0/*表的下限*/#defineUPPER300/*表的上限*/#defineSTEP20/*步長*/1.#define定義常量
語法:#define標(biāo)識(shí)符常量
語義:標(biāo)識(shí)符是常量的名稱,程序中使用標(biāo)識(shí)符和常量是一樣的含義。222.const定義常量constdoublePI=3.14159;/*PI定義為double類型的浮點(diǎn)數(shù)3.14159*/constintDOWN=0x5000;/*DOWN定義為int類型的整數(shù)0x5000(下光標(biāo)鍵的掃描碼)*/constintYES=1,NO=0;/*YES和NO分別定義為int類型的整數(shù)1和0*/
const和#define
定義的符號(hào)常量在實(shí)現(xiàn)上有本質(zhì)的不同,后者定義的標(biāo)識(shí)符沒有對(duì)應(yīng)的存儲(chǔ)單元,只是在編譯之前由預(yù)處理程序進(jìn)行簡單的文本替換。
語法:const類型名標(biāo)識(shí)符=常量;
語義:標(biāo)識(shí)符是常量的名稱,程序中使用標(biāo)識(shí)符和常量是一樣的含義。232.5.3
變量定義基本存儲(chǔ)單元地址基本存儲(chǔ)單元(不妨假設(shè)大小為1byte)102410251026204820492050intx;
int表明表明變量占用2byte,定點(diǎn)格式,最高位是符號(hào)位。存儲(chǔ)單元(占用2個(gè)基本存儲(chǔ)單元)&x=存儲(chǔ)單元首地址…………計(jì)算機(jī)內(nèi)存示意圖
語法:類型名變量表;
語義:標(biāo)識(shí)符是變量的名稱,表示是可以存儲(chǔ)類型名對(duì)應(yīng)數(shù)據(jù)值域的一個(gè)數(shù)據(jù)之內(nèi)存存儲(chǔ)單元。標(biāo)識(shí)符,標(biāo)識(shí)符,…,標(biāo)識(shí)符存儲(chǔ)單元名稱x20482049242.5.3
變量定義
語法:類型名變量表;
語義:標(biāo)識(shí)符是變量的名稱,表示是可以存儲(chǔ)類型名對(duì)應(yīng)數(shù)據(jù)值域的一個(gè)數(shù)據(jù)之內(nèi)存存儲(chǔ)單元。標(biāo)識(shí)符,標(biāo)識(shí)符,…,標(biāo)識(shí)符inttotal;intaverage;/*總和*//*平均值*/—total—averagefloateps=1.0e-5;intcount=0,sum=0;charalert='\a',c;1.0e-5eps0count0sum'\a'alert—cintcount=sum=0;×25
表達(dá)式的值是指表達(dá)式計(jì)算的結(jié)果。
表達(dá)式的(數(shù)據(jù))類型是指表達(dá)式值的(數(shù)據(jù))類型。它是由運(yùn)算符或運(yùn)算對(duì)象確定的!運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。(見2.6.2節(jié))
2.6運(yùn)算符和表達(dá)式
運(yùn)算符是表示計(jì)算的符號(hào)。運(yùn)算對(duì)象(或操作數(shù))是參加運(yùn)算的數(shù)據(jù)。操作數(shù)包括常量、變量和函數(shù)等。
目是指運(yùn)算要求的運(yùn)算對(duì)象之個(gè)數(shù)(數(shù)目)。
表達(dá)式是遵循計(jì)算機(jī)語言語法和語義規(guī)定書寫的計(jì)算式。它是高級(jí)語言描述計(jì)算步驟的核心語言成分之一。2.6.1
C運(yùn)算符簡介
常量、變量和函數(shù)均約定稱為表達(dá)式。這樣,操作數(shù)可以統(tǒng)一稱為表達(dá)式。目錄262.6.2
運(yùn)算符的優(yōu)先級(jí)和結(jié)合性表2.6運(yùn)算符的優(yōu)先級(jí)和結(jié)合性運(yùn)算符結(jié)合性(
)
[
]
->.
!~++--+-*&(類型)sizeof*/%+-<<>><<=>>===!=&^|&&||?:=+=-=*=/=%=&=^=|=<<=>>=,左右左左左左左左左左左左右右左優(yōu)先級(jí)123456789101112131415272.6.3
算術(shù)運(yùn)算
+
(單目正號(hào)運(yùn)算符,或加法運(yùn)算符,如+6、8+3)
-
(單目負(fù)號(hào)運(yùn)算符,或減法運(yùn)算符,如-6、8-3)
*
(乘法運(yùn)算符,如8*3)
/
(除法運(yùn)算符,如8/3)
%(取模運(yùn)算符,或求余運(yùn)算符,如8%3)
運(yùn)算符%的操作數(shù)必須是整數(shù)類型,其它運(yùn)算符的操作數(shù)可以是任意基本類型。
8+3表達(dá)式值:11,表達(dá)式類型:int8u+3u表達(dá)式值:11,表達(dá)式類型:unsignedint1/2表達(dá)式類型:int表達(dá)式值:0,
假設(shè)int
x,y;則x/y+1,表達(dá)式類型:int20-10-3表達(dá)式類型:int表達(dá)式值:7,8.0+3.0表達(dá)式類型:double表達(dá)式值11.0,11+11+1+y1
試給出下列代數(shù)式對(duì)應(yīng)的表達(dá)式(其中假設(shè)floaty;)1/(1+1/(1+1/(1+y)))
試指出代數(shù)式的不正確C語言表達(dá)式是______。A.(a+b)/(c+d)/y*xB.(a+b)*x/(c+d)/yC.a*b*x/(c+d)*yD.x/(c+d)*(a+b)/yC運(yùn)算符表282.6.4
關(guān)系運(yùn)算運(yùn)算符:<<=>>===!=數(shù)學(xué)符:<≤>≥=≠
運(yùn)算符的操作數(shù)可以是任意基本類型。
關(guān)系表達(dá)式的計(jì)算結(jié)果總是int類型,取值為0或1。如果比較的關(guān)系成立,值為1(代表“邏輯真”),否則為0(代表“邏輯假”)。
例2.6根據(jù)變量說明,給出表達(dá)式的值。
intx=4,y=3,z=2;charc='a';(1)c==‘A’+32(表達(dá)式值:1)(2)c+1!=‘b’(表達(dá)式值:0)(3)x-y<=10(表達(dá)式值:1)(4)z==x>y(表達(dá)式值:0)(5)x>y>z(表達(dá)式值:0)4x3y2z‘a(chǎn)‘c運(yùn)算符表29
表達(dá)式a%2的功能是測試a的值是否是偶數(shù)。表達(dá)式!(a%2)
和表達(dá)式a%2==0是等價(jià)的。提示:!(a%2)的括號(hào)不能缺省。
操作數(shù)是任意基本類型,運(yùn)算結(jié)果是int型。非0表示邏輯真True,0表示邏輯假False。2.6.5
邏輯運(yùn)算運(yùn)算符:&&||!數(shù)學(xué)符:∧∨?aba&&ba||b!a00非0非00非00非0000101111100表2.7邏輯運(yùn)算的真值表運(yùn)算符表a!(a%2)的值=1(a為偶數(shù))0(a為奇數(shù))
例2.7假設(shè)inta;說明語句,討論下列表達(dá)式。!(a%2)30
例2.8字符c的值是英文字母。
c>='a'&&c<='z'||c>='A'&&c<='Z'
操作數(shù)是任意基本類型,運(yùn)算結(jié)果是int型。非0表示邏輯真True,0表示邏輯假False。2.6.5
邏輯運(yùn)算運(yùn)算符:&&||!數(shù)學(xué)符:∧∨?運(yùn)算符表
上式等價(jià)于(c>=‘a(chǎn)‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘),即該表示式可以缺省()。
上式等價(jià)于c>=97&&c<=122||c>=65&&c<=90
。
上式等價(jià)于數(shù)學(xué)式(‘a(chǎn)‘≤c≤
‘z‘)∧(‘A‘≤c≤
‘Z‘)。0/11×31
操作數(shù)是任意基本類型,運(yùn)算結(jié)果是int型。非0表示邏輯真True,0表示邏輯假False。2.6.5
邏輯運(yùn)算運(yùn)算符:&&||!數(shù)學(xué)符:∧∨?運(yùn)算符表
例2.9某一年year是閏年。
閏年是指能被4整除但不能被100整除、或者能被400整除的年份。
!(year%4)&&year%100||!(year%400)
②①④③⑦⑥⑤↓↓↓↓↓↓↓?計(jì)算順序?④①⑥⑤⑦③②↓↓↓↓↓↓↓×√ynnyyy|n322.6.6
自增自減運(yùn)算運(yùn)算符表運(yùn)算符:++--
操作數(shù)是任意基本類型之變量(或左值表達(dá)式),運(yùn)算結(jié)果是:⑴變量的值加1或減1,其類型與變量類型一致;⑵表達(dá)式的值是變量自增自減之前或之后的值,其類型與變量類型一致。表達(dá)式基本形式前綴式后綴式++x--xx++x--先加減后取值后加減先取值x=x+1x=x+1x=x-1x=x-1
假設(shè)intx=0;,則
++x表達(dá)式的值:1
變量x的值:1
x++表達(dá)式的值:0
變量x的值:1--x表達(dá)式的值:-1
變量x的值:-1X--
表達(dá)式的值:0
變量x的值:-1332.6.6
自增自減運(yùn)算運(yùn)算符表運(yùn)算符:++--
操作數(shù)是任意基本類型之變量(或左值表達(dá)式),運(yùn)算結(jié)果是:⑴變量的值加1或減1,其類型與變量類型一致;⑵表達(dá)式的值是變量自增自減之前或之后的值,其類型與變量類型一致。
特別地,后綴式計(jì)算延遲至下列條件出現(xiàn)序列點(diǎn)(計(jì)算延遲的終止點(diǎn)稱為序列點(diǎn)):
①
&&或||或?:或,
②
完整表達(dá)式b+++b++表達(dá)式的值:0變量b的值:2
例2.11設(shè)變量說明為inta=1,b=0;計(jì)算下列表達(dá)式的值。000a--&&a表達(dá)式的值:0變量a的值:0100342.6.7
賦值運(yùn)算運(yùn)算符表
賦值運(yùn)算是將運(yùn)算器的數(shù)據(jù)存儲(chǔ)到內(nèi)存單元--變量之中。除了=運(yùn)算之外,其它均為復(fù)合賦值運(yùn)算。運(yùn)算符:=+=-=*=/=%=<<=>>=&=^=|=1.簡單賦值運(yùn)算
語法:左值表達(dá)式=表達(dá)式
語義:將表達(dá)式的值,存儲(chǔ)到左值表達(dá)式所指定的內(nèi)存單元之中,賦值表達(dá)式的值取左值表達(dá)式的值。
假設(shè)intx,y;,給出下列表達(dá)式的值。
x=y=314-x-y3143143143142.復(fù)合賦值運(yùn)算
語法:左值表達(dá)式op=表達(dá)式
語義:相當(dāng)于左值表達(dá)式=左值表達(dá)式op表達(dá)式。352.6.8
條件運(yùn)算運(yùn)算符表
語法:表達(dá)式1?表達(dá)式2:表達(dá)式3
語義:條件運(yùn)算符(?:)是一個(gè)三目運(yùn)算符
,根據(jù)表達(dá)式1的真假值,條件表達(dá)式的值為表達(dá)式2的值或表達(dá)式3的值。
假設(shè)inta,b;,指出下列表達(dá)式的功能。
a>b?a:ba>babTF
表達(dá)式a>b?a:b的功能是計(jì)算a和b的最大值,即max{a,b}。36
由于逗號(hào)運(yùn)算的左結(jié)合性,逗號(hào)表達(dá)式的一般形式如下:
((…(表達(dá)式1,表達(dá)式2),…),表達(dá)式n)2.6.9
逗號(hào)運(yùn)算運(yùn)算符表
語法:表達(dá)式1,表達(dá)式2
語義:順序計(jì)算表達(dá)式1和表達(dá)式2,逗號(hào)表達(dá)式的值為表達(dá)式2的。
((…(表達(dá)式1,表達(dá)式2),…),表達(dá)式n)
假設(shè)inti;floatx;,給出下列表達(dá)式的結(jié)果。
i=2,i%3,x=3.14-i-x2203.143.143.14372.6.10
sizeof運(yùn)算運(yùn)算符表
語法:
sizeof(類型名)
或
sizeof
表達(dá)式
語義:sizeof單目運(yùn)算。前者計(jì)算給定的類型名對(duì)應(yīng)存儲(chǔ)單元之字節(jié)數(shù);后者計(jì)算給定的表達(dá)式結(jié)果之?dāng)?shù)據(jù)類型對(duì)應(yīng)存儲(chǔ)單元之字節(jié)數(shù)。
假設(shè)16位版本的C語言,即int類型占用2字節(jié),則
sizeof(long)/*值為4*/doublex;sizeofx/*值為8*/inta=1,b=1;sizeof(a+b)/*值為2*/
特別提示:對(duì)于含有比sizeof運(yùn)算級(jí)別低的運(yùn)算符之運(yùn)算對(duì)象表達(dá)式,最外層是否使用無括號(hào),其計(jì)算意義存在差異。inta=1,b=1;sizeofa+b/*值為3*/2382.7位運(yùn)算與位表達(dá)式運(yùn)算符表運(yùn)算符:~&|^<<>>名稱:按位求反位與位或異或左移右移2.7.1
按位求反運(yùn)算
求反運(yùn)算符(~)是單目運(yùn)算,對(duì)操作數(shù)的每個(gè)二進(jìn)制位取相反值,即0變1,1變0。
假設(shè)shorta=5;unsignedshortb=5;,則a0000000000000101~a1111111111111010真值:-6b0000000000000101~b1111111111111010真值:65530目錄392.7.2
按位與、或、加運(yùn)算
位與(&)和位或(|),是按與邏輯與(&&)和邏輯或(||)的真值表,逐位獨(dú)立運(yùn)算。x0110100011010001mark1111111100000000X
&
mark01101000000000001111111111010001X
|
mark011010001101000101101000000000001111111111010001
MAKR值稱為邏輯尺(或屏蔽碼),其應(yīng)用十分廣泛。如果網(wǎng)絡(luò)IP地址設(shè)置和自動(dòng)控制系統(tǒng)等。運(yùn)算符表40x^y2.7.2
按位與、或、加運(yùn)算
位與(&)和位或(|),是按與邏輯與(&&)和邏輯或(||)的真值表,逐位獨(dú)立運(yùn)算。
位異或(^),是按如下真值表,逐位獨(dú)立運(yùn)算。pqp^q000011101110x01101000110100011111111100000000y1001011111010001運(yùn)算符表412.7.3
左移和右移運(yùn)算
語法:表達(dá)式1<<表達(dá)式2
表達(dá)式1>>表達(dá)式2
語義:將表達(dá)式1的值左移(<<)或右移(>>)表達(dá)式2之位數(shù),其中,表達(dá)式2為大于0的整型表達(dá)式。運(yùn)算符表左移:高位丟棄,低位補(bǔ)0右移:低位丟棄,高位無符號(hào)類型--補(bǔ)0
有符號(hào)類型--補(bǔ)符號(hào)位
有些機(jī)器是補(bǔ)0提示:左移1位相當(dāng)于表達(dá)式1乘以2;右移1位相當(dāng)于表達(dá)式1除以2。42
假設(shè)inta=11;unsignedb=15;,移位運(yùn)算例子如下
。表達(dá)式二進(jìn)制表示值行為ab-aa<<2b>>3-a>>20000000000001011000000000000111111111111111101010000000000101100000000000000000111111111111111011115-11441-3對(duì)a進(jìn)行負(fù)號(hào)運(yùn)算a左移2位b右移3位-a右移2位(補(bǔ)符號(hào)位其他機(jī)器可能補(bǔ)0)43
例2.16
寫一個(gè)表達(dá)式,取一個(gè)整數(shù)x,從第m位開始向右的n位,并使其向右端靠齊。?…
?b16
…
bm+1
bm
bm-1
…
bm-n+1m-n+1nx>>m-n+10…00
…
0
bm
bm-1
…
bm-n+116-nn0…0
0
…
0
1
1…116-nnb15
…
bm+1
bm
bm-1
…
bm-n+1bm-n
…b0nm-n+1x~(0xffff<<n)x>>m-n+1&~(0xffff<<n)44
例2.17
壓縮和解壓:21世紀(jì)日期的日、月和年3個(gè)整數(shù)壓縮成1個(gè)16位的整數(shù)
。日月年151110870547yearmonthdaydatedate=month<<=7|day<<=11|year
452.8類型轉(zhuǎn)換2.8.1
整數(shù)提升
任何表達(dá)式中的char、signedchar、unsignedchar、short和unsignedshort都要先轉(zhuǎn)換成int或unsigned之后,才參與各種運(yùn)算。這種轉(zhuǎn)換,稱為“整數(shù)提升”。
如果原類型的所有值可以用int表示,則轉(zhuǎn)換成int,否則轉(zhuǎn)換成unsigned。整數(shù)提升
提升方法:無符號(hào)整數(shù)提升,擴(kuò)展位填充0;有符號(hào)整數(shù)提升,擴(kuò)展位填充符號(hào)位。假設(shè)16位版,signedcharx=-3;,則111111011111111111111101目錄462.8.2
一般算術(shù)轉(zhuǎn)換
除賦值運(yùn)算之外引起的類型轉(zhuǎn)換,稱為算術(shù)轉(zhuǎn)換。整數(shù)提升之后,如果表達(dá)式的兩個(gè)操作數(shù)類型不相同,就會(huì)發(fā)生算術(shù)轉(zhuǎn)換。char/shortintunsignedlongunsignedlongfloatdoublelongdouble
例2.12設(shè)c、l和d分別為char、long和double型變量,則表達(dá)式:c*l+dintlonglongdoubledouble
例2.13計(jì)算表達(dá)式-1<1U
的值。[-1]補(bǔ)=1111111111111111[1
]補(bǔ)=0000000000000001表達(dá)式-1<1U
的值為0,即邏輯假值false。轉(zhuǎn)換方法:等長整數(shù)轉(zhuǎn)換保持位串不變,取消符號(hào)。算術(shù)運(yùn)算、關(guān)系運(yùn)算和條件運(yùn)算47課堂練習(xí)指出下列表達(dá)式的類型。(假設(shè)16位版)
1.
12,3.14
double
2.
12,3.14,’a’
int
3.
1>2?314u:’a’
unsignedint
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課件合同范例
- 房屋買房付款合同范例
- 山體爆破合同范例
- 支付工程工資合同范例
- 門面店合同范例
- 2020年人教版物理九年級(jí)下冊教案第20章第5節(jié)《磁生電》
- 外遇離婚合同范例
- 商業(yè)街門面房出租合同范例
- 鴨毛采購合同范例
- 五年級(jí)上冊數(shù)學(xué)教案- 2.4 欣賞與設(shè)計(jì)-北師大版
- 2024-2025學(xué)年新教材高中化學(xué) 第2章 分子結(jié)構(gòu)與性質(zhì) 第1節(jié) 共價(jià)鍵說課稿 新人教版選擇性必修2
- 中國老年患者術(shù)后譫妄防治專家共識(shí)2023
- 超星爾雅學(xué)習(xí)通《微觀經(jīng)濟(jì)學(xué)(浙江大學(xué))》2024章節(jié)測試答案
- 山東省青島市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- DB34∕T 4504-2023 中醫(yī)治未病科設(shè)施配置指南
- 國家QC小組成果案例(攻關(guān)型)
- GB/T 44679-2024叉車禁用與報(bào)廢技術(shù)規(guī)范
- 【人教版】《勞動(dòng)教育》五下 勞動(dòng)項(xiàng)目八《制作校園提示牌》課件
- 醫(yī)學(xué)教材單孔腹腔鏡手術(shù)經(jīng)驗(yàn)分享
- 涉外法律顧問服務(wù)合同范本
- 云南省昆明市五華區(qū)四2024年數(shù)學(xué)四上期末監(jiān)測試題含解析
評(píng)論
0/150
提交評(píng)論