版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式VC++的數(shù)據(jù)類型基本運(yùn)算符表達(dá)式語句、空語句及自增、自減運(yùn)算符VC++的數(shù)據(jù)類型關(guān)鍵字標(biāo)識(shí)符標(biāo)點(diǎn)符號(hào)分隔符C++的基本數(shù)據(jù)類型常量變量2.1關(guān)鍵字(keyword)在C++語言中,已有特殊含義和用途的英文單詞稱為關(guān)鍵字或保留字C++中有48個(gè)關(guān)鍵字,其中5個(gè)不適用VC++VC++中增加了19個(gè)關(guān)鍵字,它們不適用C++C++與VC++兼容的43個(gè)關(guān)鍵字表2-12.1.1標(biāo)識(shí)符標(biāo)識(shí)符的定義以字母或下劃線開始的字母、數(shù)字以及下劃線組成的字符序列稱為標(biāo)識(shí)符。標(biāo)識(shí)符的有效長(zhǎng)度VC++中,標(biāo)識(shí)符的有效長(zhǎng)度為1~247個(gè)字符標(biāo)識(shí)符的命名方法Windows標(biāo)準(zhǔn)命名法(匈牙利法)意義法 2.1.2標(biāo)點(diǎn)符號(hào)C++中的標(biāo)點(diǎn)符號(hào)共有9個(gè):#、(、)、{、}、,、:、;、…標(biāo)點(diǎn)符號(hào)不表示任何操作同一個(gè)符號(hào)在不同的應(yīng)用場(chǎng)合,其作用與含義是不同的例如“,”既可做為標(biāo)點(diǎn)符號(hào),又可作為運(yùn)算符使用2.1.3分隔符C++源程序中每一個(gè)詞法符號(hào)之間必須用分隔符分隔開C++中的分隔符有:運(yùn)算符、空格、標(biāo)點(diǎn)符號(hào)、回車鍵和Tab鍵注解也可以用作分隔符2.1.4C++的基本數(shù)據(jù)類型描述一個(gè)數(shù)據(jù)需要兩方面的信息:一是數(shù)據(jù)所占用的存儲(chǔ)空間的大小(字節(jié)數(shù)),二是該數(shù)據(jù)所允許執(zhí)行的操作或運(yùn)算。為了便于對(duì)數(shù)據(jù)進(jìn)行操作和加工,需要對(duì)數(shù)據(jù)進(jìn)行分類,這種分類稱為數(shù)據(jù)類型。C++中數(shù)據(jù)類型分為兩大類:基本數(shù)據(jù)類型和導(dǎo)出數(shù)據(jù)類型?;緮?shù)據(jù)類型2.1.5基本數(shù)據(jù)類型基本數(shù)據(jù)類型:字符型(char)、整型(int)、實(shí)型(float)、雙精度型(double)和無值型(void)??梢栽谶@些基本數(shù)據(jù)類型前加上以下幾個(gè)修飾詞而形成一種新的基本數(shù)據(jù)類型:有符號(hào)(signed)、無符號(hào)(unsigned)、長(zhǎng)(long)、短 (short)。以上四個(gè)修飾詞來修飾int時(shí),關(guān)鍵字int可以省略。無修飾詞的int和char,編譯程序認(rèn)為是有符號(hào)的。常量在程序的執(zhí)行過程中,值保持不變(也不能被改變)的量稱為常量。字面常量標(biāo)識(shí)符常量2.1.6字面常量整型常量實(shí)型常量字符型常量字符串常量整型常量十進(jìn)制常量:第一位為1~9的任意整數(shù)(由0~9之間的整數(shù)構(gòu)成),比如123,-45八進(jìn)制常量:以0開頭的整數(shù)(由0~8之間的整數(shù)構(gòu)成),比如043,071十六進(jìn)制常量:以0X或0x開頭的整數(shù)(由0~9之間的整數(shù)以及A~F之間的字母構(gòu)成),比如,0X32,0xA3F長(zhǎng)整型常量:以L
或l
結(jié)尾的整數(shù),比如:123L,824l無符號(hào)整形常量:以U或u結(jié)尾的整數(shù),比如:123u,824U實(shí)型常量十進(jìn)制小數(shù)形式:比如,1.23指數(shù)形式:格式為<小數(shù)>E(或e)<指數(shù)>,比如,2e3表示2000,2E-4表示0.0002字符型常量用單引號(hào)括起來的單個(gè)字符叫字符型常量。字符常量在計(jì)算機(jī)內(nèi)是采用該字符的ASCII編碼值來表示的,其數(shù)據(jù)類型為char。注意三個(gè)字符:‘“\,不能直接表示為‘‘’,‘”’,‘\’,而必須采用轉(zhuǎn)義序列方法。
轉(zhuǎn)義序列方法反斜杠+字母:表示控制字符,比如‘\a’表示響鈴,‘\n’表示回車符。反斜杠+特殊字符(‘,“,\),表示該字符。比如,’\\‘表示反斜杠“\”,’\‘’表示單引號(hào)“‘”。反斜杠+整型常量:此時(shí)整型常量必須是一個(gè)八進(jìn)制或十六進(jìn)制數(shù)(以X或x開頭),其取值通常在0~255之間,此時(shí),如果在整數(shù)之前沒有0,表示八進(jìn)制。比如:‘\141’、‘\X61’都與‘a(chǎn)’等價(jià)。字符串常量用雙引號(hào)括起來的若干個(gè)字符。當(dāng)雙引號(hào)(“)或反斜杠(\)作為字符串中的一個(gè)字符時(shí),必須采用轉(zhuǎn)義序列法;而單引號(hào)(‘)出現(xiàn)在字符串中時(shí),可采用或不采用轉(zhuǎn)義序列法。字符串常量和字符常量的區(qū)別在每一個(gè)字符串常量的末尾,存儲(chǔ)時(shí)都要存放一個(gè)“0”,表示字符串的結(jié)束符字符串常量不能直接運(yùn)用一些運(yùn)算,比如算術(shù)運(yùn)算、比較運(yùn)算等,而字符常量可以標(biāo)識(shí)符常量用標(biāo)識(shí)符表示的常量??捎脙煞N方法定義標(biāo)識(shí)符常量:利用編譯預(yù)處理指令。利用關(guān)鍵字define,以如下形式定義常量: #definePI3.14159利用常量說明符const。比如:
constI=2;注意,標(biāo)識(shí)符常量一經(jīng)定義,在其后繼的程序中就不能改變其值。例2-1變量在程序的執(zhí)行過程中,可改變其值的量稱為變量。根據(jù)其取值不同,變量可分為不同類型的變量:比如,整型變量、實(shí)型變量、字符型變量、構(gòu)造型變量、指針型變量等。對(duì)于任一變量,編譯程序要為其分配若干個(gè)字節(jié)(連續(xù)的)的內(nèi)存單元,以便保存該變量的值,分配內(nèi)存的大小由變量的類型決定。不管是什么類型的變量,通常是變量的說明在前,變量的使用在后。變量說明變量的賦值與初始化2.1.7變量說明說明變量的一般格式為:《storage》<type><var_name1>《,<var_name2>,…..,<var_namen>》;在C++中,變量說明是作為一條語句來處理的,稱為變量說明語句。變量說明可以出現(xiàn)在程序語句可出現(xiàn)的任何位置。同一個(gè)變量只能作一次定義性說明。給一個(gè)變量取一個(gè)新值時(shí),稱為對(duì)變量的賦值;取一個(gè)變量的值時(shí),稱為對(duì)變量引用;變量的賦值與初始化變量的值可以通過賦值語句而得到改變。比如,假設(shè)有一個(gè)整型變量a,則通過如下語句就可以改變a的值: a=2;當(dāng)引用某個(gè)變量時(shí),該變量必須有一個(gè)唯一確定的值。首次給變量賦值稱為對(duì)變量賦初值,或變量的初始化??梢杂萌N方法給變量賦初值:在變量說明時(shí),直接賦初值;使用賦值語句賦初值;通過輸入流cin等其它方法?;具\(yùn)算符在C++中,對(duì)數(shù)據(jù)(變量或常量)進(jìn)行運(yùn)算或處理是通過運(yùn)算符進(jìn)行的。所謂運(yùn)算符就是表示某種特定運(yùn)算形式簡(jiǎn)單的記號(hào)。參與運(yùn)算的對(duì)象稱為操作數(shù)。數(shù)據(jù)與運(yùn)算符一起構(gòu)成表達(dá)式,它描述對(duì)哪些數(shù)據(jù)
、以何種順序進(jìn)行什么樣的操作。要正確掌握運(yùn)算符,必須要注意的幾點(diǎn)基本運(yùn)算符表達(dá)式類型轉(zhuǎn)換2.2要注意的幾點(diǎn)每個(gè)運(yùn)算符的功能和作用運(yùn)算符與操作數(shù)的關(guān)系 運(yùn)算符的操作數(shù)的個(gè)數(shù)、操作數(shù)的類型運(yùn)算的優(yōu)先級(jí)與結(jié)合性(表1.3)
運(yùn)算符的結(jié)合性規(guī)定了優(yōu)先級(jí)相同的運(yùn)算符的計(jì)算順序。有兩種結(jié)合性:右結(jié)合:操作數(shù)按從左到右的順序進(jìn)行運(yùn)算,絕大多數(shù)運(yùn)算符都是右結(jié)合的左結(jié)合:操作數(shù)按從右到左的順序進(jìn)行運(yùn)算基本運(yùn)算符基本運(yùn)算符是指完成算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算、位運(yùn)算的運(yùn)算符
算術(shù)運(yùn)算符
關(guān)系運(yùn)算符
邏輯運(yùn)算符
位運(yùn)算符
賦值運(yùn)算符
sizeof()運(yùn)算符
2.2.1算術(shù)運(yùn)算符C++中有單目運(yùn)算符:+-(正負(fù)號(hào))C++中有雙目運(yùn)算符:+-*/%算術(shù)運(yùn)算符都是右結(jié)合的,它們之間的優(yōu)先級(jí)與數(shù)學(xué)中一致??捎美ㄌ?hào)()來改變運(yùn)算符的優(yōu)先順序,先計(jì)算括號(hào)內(nèi)的值,再計(jì)算括號(hào)外的值對(duì)于雙目運(yùn)算符來說,兩個(gè)整數(shù)的運(yùn)算結(jié)果還是整數(shù);但當(dāng)其中有一個(gè)操作數(shù)為實(shí)型或double型時(shí),則運(yùn)算結(jié)果為實(shí)型或double型運(yùn)算符%的操作數(shù)只能是整型或字符型關(guān)系運(yùn)算符關(guān)系運(yùn)算是對(duì)兩個(gè)操作數(shù)進(jìn)行的比較運(yùn)算,C++中有六個(gè)關(guān)系運(yùn)算符:<<=>>===!=關(guān)系運(yùn)算符都是二目運(yùn)算符。運(yùn)算結(jié)果是一個(gè)整數(shù),即當(dāng)關(guān)系成立時(shí),結(jié)果為1,而當(dāng)關(guān)系不成立時(shí),結(jié)果為0關(guān)系運(yùn)算符的兩個(gè)操作數(shù)可以是任意基本類型的數(shù)據(jù)在應(yīng)用關(guān)系運(yùn)算符時(shí),要注意計(jì)算機(jī)存儲(chǔ)和運(yùn)算的精度誤差邏輯運(yùn)算符邏輯運(yùn)算符用來表示操作數(shù)之間的邏輯關(guān)系,其運(yùn)算結(jié)果為0或1,即當(dāng)邏輯關(guān)系成立時(shí),運(yùn)算結(jié)果為1,否則,為0(表1.4)C++中,邏輯運(yùn)算符有三種:!:邏輯非,單目運(yùn)算符&&:邏輯與,雙目運(yùn)算符||:邏輯或,雙目運(yùn)算符邏輯運(yùn)算符的操作數(shù)可為任意一種基本數(shù)據(jù)類型的變量和常量,在運(yùn)算過程中,將非0數(shù)轉(zhuǎn)化為1參與運(yùn)算。
表1.4ab!a!bA&&ba||b110011100101011001001100位運(yùn)算符位運(yùn)算符是對(duì)其操作數(shù)按二進(jìn)制數(shù)形式逐位進(jìn)行的邏輯運(yùn)算或移位運(yùn)算。位運(yùn)算符的操作數(shù)只能是整數(shù)類型的數(shù)據(jù)。C++中共有六種位運(yùn)算符:注意,在進(jìn)行位運(yùn)算時(shí),如果其中一個(gè)操作數(shù)為變量,在經(jīng)過運(yùn)算后操作數(shù)的值并沒有改變,只是將運(yùn)算結(jié)果作為位運(yùn)算的返回值按位取反(~)按位與(&)按位或(|)按位異或(^)左移(<<)右移(>>)按位取反(~)
將操作數(shù)的各個(gè)二進(jìn)制位取反。即0變1,1變0。該運(yùn)算符為單目運(yùn)算符
比如:對(duì)于整型數(shù)a,其二進(jìn)制值為110101,則~a為0xffffffca。計(jì)算過程如下:由于a是整型,故在存儲(chǔ)空間中占4個(gè)字節(jié),共32位,因此a的低8位為00110101,而高位都為0,因此按位取反之后高位都為1,而低8為為11001010,即0xffffffca按位與(&)將兩個(gè)操作數(shù)的對(duì)應(yīng)的二進(jìn)制位分別進(jìn)行邏輯與運(yùn)算。該運(yùn)算符為雙目運(yùn)算符。按位邏輯與的運(yùn)算規(guī)則是只有當(dāng)兩個(gè)操作數(shù)都為1時(shí),結(jié)果才為1,否則為0比如,整型變量a和b的二進(jìn)制形式的值分別為:11001和11110000,則a&b的二進(jìn)制值為00010000。該運(yùn)算用豎式表示如下:
a00011001b&)11110000a&b00010000按位或(|)將兩個(gè)操作數(shù)對(duì)應(yīng)的二進(jìn)制位分別進(jìn)行邏輯或運(yùn)算。該運(yùn)算符為雙目運(yùn)算符。按位或的運(yùn)算規(guī)則是只有當(dāng)兩個(gè)操作數(shù)都為0時(shí),結(jié)果才為0,否則為1比如,整型變量a和b的二進(jìn)制形式的值分別為:11001和11110000,則a|b的二進(jìn)制值為11111001。該運(yùn)算用豎式表示如下:
a00011001b|)11110000a|b11111001按位異或(^)將兩個(gè)操作數(shù)的對(duì)應(yīng)的二進(jìn)制位分別進(jìn)行邏輯異或運(yùn)算。該運(yùn)算符為雙目運(yùn)算符。邏輯異或的運(yùn)算規(guī)則為:僅當(dāng)兩操作數(shù)的在某位對(duì)應(yīng)不同時(shí),該位的運(yùn)算結(jié)果為1,否則為0。
比如,整型變量a和b的二進(jìn)制形式的值分別為:11001和11110000,則a^b的二進(jìn)制值為11101001。該運(yùn)算用豎式表示如下:
a
00011001b^)11110000a^b11101001左移(<<)將一個(gè)二進(jìn)制數(shù)向左移位指定的位數(shù)。該運(yùn)算符為二目運(yùn)算符,其一般格式為: <操作數(shù)1><<<操作數(shù)2>其中<操作數(shù)1>(設(shè)為a)為任一類型的整型變量,而<操作數(shù)2>(設(shè)為b)通常為一正整數(shù),表示將a的二進(jìn)制形式中的各位依次向左移動(dòng)b位,移動(dòng)的結(jié)果作為該運(yùn)算的返回值,但a的值保持不變。比如:
inta=34,b=2,c; c=a<<b;//將a的二進(jìn)制形式的各位數(shù)向左移位2位。
此時(shí)a的值保持不變,依然為34,而將移位后的結(jié)果136賦給c。
右移(>>)將一個(gè)二進(jìn)制數(shù)向右移位指定的位數(shù),該運(yùn)算符為二目運(yùn)算符,其一般格式為:
<操作數(shù)1>>><操作數(shù)2>其中<操作數(shù)1>(設(shè)為a)為任一類型的整型變量,而<操作數(shù)2>(設(shè)為b)通常為一正整數(shù),表示將a的二進(jìn)制形式中的各位依次向右移動(dòng)b位,移動(dòng)的結(jié)果作為該運(yùn)算的返回值,但a的值保持不變。對(duì)一個(gè)整數(shù)右移n位,相當(dāng)于將該數(shù)除以2n,并忽略小數(shù)部分
賦值運(yùn)算符C++中賦值運(yùn)算符分為兩種:
單一賦值運(yùn)算符。即等號(hào)“=”。該運(yùn)算符為二目運(yùn)算符,且結(jié)合性為左結(jié)合。其功能為將右操作數(shù)賦給左操作數(shù)。例如:
a=10//把10賦給變量a復(fù)合賦值運(yùn)算符。在單一的賦值運(yùn)算符“=”前加上其它運(yùn)算符(算術(shù)運(yùn)算符或位運(yùn)算符),可以構(gòu)成復(fù)合的賦值運(yùn)算符。C++提供了如下10種復(fù)合的賦值運(yùn)算符:+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=sizeof()運(yùn)算符sizeof()運(yùn)算符是用來計(jì)算某種類型或數(shù)據(jù)所占用的字節(jié)數(shù),它為單目運(yùn)算符。該運(yùn)算符與其它類型的基本運(yùn)算符稍有不同,它的操作數(shù)必須在括號(hào)內(nèi),其使用格式為:
sizeof(<類型>)或sizeof(<表達(dá)式>)其中前一種格式中<類型>可以是任意一種基本數(shù)據(jù)類型或用戶自定義類型。后一種格式用于計(jì)算<表達(dá)式>結(jié)果所屬類型所占用的字節(jié)數(shù)。例如
sizeof(int) //對(duì)32位計(jì)算機(jī),其值為4sizeof(char) //其值為1sizeof(longdouble) //其值為8
doublea=2.0; floatb=3.4;sizeof(b+3)//其值為4,因?yàn)閎+3的結(jié)果為實(shí)型數(shù)
sizeof(b+3.4)//其值為8,因?yàn)閎+3.4的結(jié)果為雙精度型數(shù)
sizeof(a+3.4)//其值為8,因?yàn)閍+3.4的結(jié)果為雙精度型
表達(dá)式 表達(dá)式是由運(yùn)算符和操作數(shù)組成的,能夠求出值的式子。操作數(shù)可以為常量、變量、函數(shù)調(diào)用或其它表達(dá)式等等。最簡(jiǎn)單的表達(dá)式是常量和變量。根據(jù)運(yùn)算符的類型的不同,可將表達(dá)式分為五類:算術(shù)表達(dá)式邏輯表達(dá)式關(guān)系表達(dá)式賦值表達(dá)式逗號(hào)表達(dá)式2.2.2算術(shù)表達(dá)式算術(shù)表達(dá)式是由算術(shù)運(yùn)算符和操作數(shù)組成的,能求出其值的式子。操作數(shù)可以是任意基本類型的數(shù)據(jù)。
在求算術(shù)表達(dá)式的值的過程中,要按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行,即先算乘除,后算加減。相鄰兩個(gè)運(yùn)算符的優(yōu)先級(jí)相同,則按規(guī)定的“從左到右”的次序運(yùn)算。最后表達(dá)式的值就是該表達(dá)式的算術(shù)運(yùn)算的結(jié)果,表達(dá)式的類型按混合運(yùn)算的類型轉(zhuǎn)換規(guī)則確定。例如inta=2,b=2,c=4,d=5,e=6;intf=a+b-c/d*e;
等價(jià)于intf=((a+b)-((c/d)*e));intg=++a*a+a*a; //Ag的值為18inth=b*b+++b*b; //Bh的值為13A、B兩行反映了算術(shù)運(yùn)算符的結(jié)合性。在A行,先將a加1變?yōu)?,再計(jì)算++a*a,結(jié)果為9,然后計(jì)算a*a,結(jié)果為9,最后將這兩者相加得g得值為18。對(duì)于B行,先計(jì)算b*b,結(jié)果為4,然后計(jì)算++b*b,在計(jì)算該式之前,先將b加1變?yōu)?,然后再計(jì)算得結(jié)果為9,最后將這兩式相加,得到h的值為13。
邏輯表達(dá)式用邏輯運(yùn)算符將操作數(shù)連接起來的式子稱為邏輯表達(dá)式。邏輯表達(dá)式的值為1或0。例如:
inta=2,b=3,c=4,d=5,e;e=!a;//e的值為0e=a>b||a<c;//等價(jià)于e=((a>b)||(a<c)),e的值為1e=a>b||a>!c&&b>=d-2//等價(jià)于e=(a>b)||((a>!c)&&(b>=(d-3))),e的值為1e=!a>b//等價(jià)于e=!(a>b),e的值為1邏輯表達(dá)式的副作用
邏輯表達(dá)式的副作用對(duì)于a&&b&&c,只有a為非0時(shí),才需要計(jì)算b的值,因?yàn)楫?dāng)a為0時(shí),不管后面的項(xiàng)如何,都能得到該表達(dá)式的值就為0。同樣只有在a和b都為非0的情況下才需要計(jì)算c的值。
對(duì)于a||b||c,只要a為非0,就不需要判斷b和c的值,而只有當(dāng)a、b都為0時(shí)才需要計(jì)算c項(xiàng)。
例如:
inta=2,b=3,c=4,d=5,e;e=a>b&&++b; //Ae=a<b||b++類似e=a<1&&++c||++d; //B
關(guān)系表達(dá)式關(guān)系表達(dá)式是用關(guān)系運(yùn)算符將兩個(gè)操作數(shù)連接起來的式子。關(guān)系表達(dá)式的值為0或1,即當(dāng)關(guān)系成立時(shí),值為1;而當(dāng)關(guān)系不成立時(shí),值為0。例如
inta=2,b=3,c=4,d=5,e;e=a+b>c+d; //根據(jù)優(yōu)先級(jí),等價(jià)于 e=((a+b)>(c+d)),因此e值為0e=++a==b;//等價(jià)于e=((++a)==b),e的值為1。 試比較a++==b(值為0)e=5<=6 //e的值為1e=‘a(chǎn)’>=’b’ //e的值為0賦值表達(dá)式用賦值運(yùn)算符(單一賦值運(yùn)算符和復(fù)合賦值運(yùn)算符)將兩個(gè)操作數(shù)連接起來的式子稱為賦值表達(dá)式,注意賦值表達(dá)式的左操作數(shù)必須為變量。賦值表達(dá)式的值為左操作數(shù)的值,因此賦值表達(dá)式還可進(jìn)一步參與運(yùn)算。例如
由于賦值運(yùn)算符的結(jié)合性為左結(jié)合,因此運(yùn)算方向是自右向左的,因此當(dāng)出現(xiàn)連續(xù)賦值運(yùn)算符時(shí),表達(dá)式的值為最左邊的變量的值。例如
inta,b;a+=4;a>(b=3);//表達(dá)式“b=3”(值為3)參與關(guān)系運(yùn)算,注意:括號(hào)不能省
a&&(b*=4)//表達(dá)式“b*=4”參與邏輯運(yùn)算
a+b=2;//錯(cuò)誤,因?yàn)閍+b不是變量。類似的錯(cuò)誤還有a+2=4等
inta,b,c=2;a=b=c+=10;//等價(jià)于a=(b=(c+=10)),該表達(dá)式的為a的值,即12a=3+b=c;//錯(cuò)誤,因?yàn)樵摫磉_(dá)式等價(jià)于a=((3+b)=c),3+b不是變量
a+=b=3;//等價(jià)于a+=(b=3)逗號(hào)表達(dá)式逗號(hào)表達(dá)式是用逗號(hào)運(yùn)算符將表達(dá)式連起來組成的式子。逗號(hào)運(yùn)算符的優(yōu)先級(jí)為所有運(yùn)算符中最低的。逗號(hào)運(yùn)算符的結(jié)合性為右結(jié)合,且整個(gè)逗號(hào)表達(dá)式的值和類型與最后一個(gè)表達(dá)式的值和類型一致。例如
自增自減運(yùn)算符在逗號(hào)表達(dá)式中的應(yīng)用
inta=1,b=3,c=2,d;d=(a=4,b=2,a>b); //先計(jì)算a=4,再計(jì)算b=2,最后計(jì)算a>b為1,因此d=1d=a=(b=3,c*2); //結(jié)果:a=c*2=4,b=3,d=4a=1;d=(a++,b+=a,c=b+2);先計(jì)算a++,然后將a增加以后的值2參與第二項(xiàng)b+=a的計(jì)算,得到b=5,再計(jì)算c=b+2,得到c=7,因此第三個(gè)表達(dá)式的值為7,即該逗號(hào)表達(dá)式的值為7。這里若用++a代替a++,則所得到的結(jié)果一樣。
自增自減運(yùn)算符在逗號(hào)表達(dá)式中與在其它表達(dá)式中的運(yùn)算規(guī)則是不一樣的。試比較:
inta=2,b;a++>(b=a);//執(zhí)行該語句后,得到a=3,b=2。這里前置自增和后置自增的結(jié)果不同
類型轉(zhuǎn)換在求表達(dá)式值的過程中,對(duì)于二目運(yùn)算符,通常會(huì)出現(xiàn)兩個(gè)操作數(shù)的類型不一致的情形,這時(shí)就要求將這兩個(gè)操作數(shù)轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。一般情況下,C++會(huì)進(jìn)行自動(dòng)轉(zhuǎn)換,當(dāng)然也可以強(qiáng)制轉(zhuǎn)換。
不同類型數(shù)據(jù)運(yùn)算的自動(dòng)轉(zhuǎn)換規(guī)則
不同類型之間賦值的自動(dòng)轉(zhuǎn)換規(guī)則
強(qiáng)制類型轉(zhuǎn)換
2.2.3不同類型數(shù)據(jù)運(yùn)算的自動(dòng)轉(zhuǎn)換規(guī)則當(dāng)操作數(shù)的類型為字符型或短整型(包括加上signed、unsigned修飾詞)時(shí),系統(tǒng)自動(dòng)轉(zhuǎn)換為整型數(shù)參與運(yùn)算。例如
當(dāng)兩個(gè)操作數(shù)不同時(shí),將表示范圍較小的數(shù)據(jù)類型轉(zhuǎn)換成與另一操作數(shù)相同的類型后再參與運(yùn)算。轉(zhuǎn)換關(guān)系為:
int→unsigned→long→float→double
例如
shortinta=2,b=3;charx=’a’,y=’b’;
則在計(jì)算表達(dá)式a+b的值時(shí)先將a和b轉(zhuǎn)換為整型,然后再進(jìn)行計(jì)算,表達(dá)式的值類型也為整型??梢杂眠\(yùn)算符sizeof()進(jìn)行驗(yàn)證,即sizeof(a+b)=4。
對(duì)x+y和a+x也采用同樣的方法進(jìn)行計(jì)算。
可以看到,當(dāng)兩個(gè)操作數(shù)的類型相同且都為字符型和短整型時(shí),要進(jìn)行類型轉(zhuǎn)換。但當(dāng)兩個(gè)操作數(shù)的同為其它類型時(shí),則不需要類型轉(zhuǎn)換。
inta=3,b=4;charch=’s’;doublex=3.4;
在計(jì)算表達(dá)式a*ch+b/x時(shí),首先計(jì)算a*ch,先將ch轉(zhuǎn)換為整型數(shù),再參與運(yùn)算,假設(shè)得到結(jié)果為t1,然后計(jì)算b/x,先將b轉(zhuǎn)換為double型,再參與運(yùn)算,得到的結(jié)果為double型,假設(shè)為t2,最后計(jì)算t1+t2,先將t1轉(zhuǎn)換為double型,再參與運(yùn)算,得到一個(gè)double型的數(shù),即為表達(dá)式的值。
不同類型之間賦值的自動(dòng)轉(zhuǎn)換規(guī)則 當(dāng)賦值運(yùn)算符右操作數(shù)的類型與左左操作數(shù)(變量)的類型不一致時(shí),如果它們可進(jìn)行轉(zhuǎn)換(稱它們相互兼容),則系統(tǒng)自動(dòng)對(duì)它們進(jìn)行轉(zhuǎn)換。規(guī)則如下:將實(shí)型數(shù)(雙精度型)賦給整型變量將字符型數(shù)據(jù)賦給整型變量其它情形對(duì)于以上的各種形式的自動(dòng)轉(zhuǎn)換,編譯系統(tǒng)在編譯時(shí)可能會(huì)給出一些警告信息。如要避免警告信息,可采取強(qiáng)制轉(zhuǎn)換的方式。將實(shí)型數(shù)(雙精度型)賦給整型變量將實(shí)型數(shù)(雙精度型)賦給整型變量時(shí),只取實(shí)型數(shù)的整數(shù)部分,舍去小數(shù)部分。當(dāng)其整數(shù)部分超過整數(shù)的范圍時(shí),賦值的結(jié)果錯(cuò)誤。
將字符型數(shù)據(jù)賦給整型變量 根據(jù)字符類型的不同,可分兩種情況:
(a)對(duì)于無符號(hào)字符類型,將該字符型數(shù)據(jù)的二進(jìn)制形式的八位數(shù)直接賦給整型變量二進(jìn)制形式的低八位,再將整型變量的高位補(bǔ)0。
(b)對(duì)于有符號(hào)字符類型,若符號(hào)位為0,則與無符號(hào)字符類型的轉(zhuǎn)換方式相同;如符號(hào)位為1,則將將該字符型數(shù)據(jù)的二進(jìn)制形式的八位數(shù)直接賦給整型變量二進(jìn)制形式的低八位,再將高位補(bǔ)1。例如
signedcharch=249;inta=ch;則a的值為-7。轉(zhuǎn)換過程可用下圖表示:
1111100111111001111111111111111111111111低八位高位字符型數(shù)據(jù)ch整型變量a其它情形對(duì)于其它情形,當(dāng)將精度較低的數(shù)據(jù)賦給精度較高的變量時(shí),可直接將前者轉(zhuǎn)換為與后者精度相同,再賦值。當(dāng)將精度較高的數(shù)據(jù)(設(shè)為a)賦給精度較低的變量(設(shè)為b)時(shí),當(dāng)a賦給b的值超出b所屬類型的范圍時(shí),則賦值的結(jié)果錯(cuò)誤。
強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是指把一個(gè)表達(dá)式的值強(qiáng)制轉(zhuǎn)換為指定的類型。格式如下:
(<類型名>)<表達(dá)式>或<類型名>(<表達(dá)式>)
這種方法的功能是:先求表達(dá)式的值,再將該值強(qiáng)制轉(zhuǎn)換為<類型名>所指定的類型。
對(duì)于第一種形式,要注意強(qiáng)制類型轉(zhuǎn)換運(yùn)算符“()”的優(yōu)先級(jí)為第2級(jí)。例如
(float)3/4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024個(gè)人房屋租房合同模板
- 2024勞務(wù)施工承包合同范本
- 2024年工程分包補(bǔ)充協(xié)議
- 2024新房屋轉(zhuǎn)讓合同范本
- 2024商標(biāo)轉(zhuǎn)讓合同
- 2024年工程清包合同模板
- 2(2024版)大運(yùn)河國際文化交流活動(dòng)合作協(xié)議(2024版)
- 2024年商業(yè)中心施工協(xié)議
- 2024年家政服務(wù)人員雇傭合同
- 2024設(shè)備材料采購合同樣本
- 部編版2024-2025學(xué)年語文五年級(jí)上冊(cè)第4單元-單元測(cè)試卷(含答案)
- 期中 (試題) -2024-2025學(xué)年人教PEP版英語六年級(jí)上冊(cè)
- 大學(xué)與文化傳承智慧樹知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 2024年心理咨詢師(中科院心理研究所版)考試題庫大全-上(單選題)
- 2024春形勢(shì)與政策課件當(dāng)前國際形勢(shì)與中國原則立場(chǎng)
- 2024年舟山繼續(xù)教育公需課考試題庫
- 一年級(jí)拼音默寫表
- 2024屆高考英語閱讀理解命題說題課件
- 軟件正版化培訓(xùn)課件
- GB/T 1536-2021菜籽油
- 第二單元 遵守社會(huì)規(guī)則 復(fù)習(xí)課件 部編版道德與法治八年級(jí)上冊(cè)
評(píng)論
0/150
提交評(píng)論