第二章數(shù)據(jù)類型運(yùn)算符和表達(dá)式_第1頁
第二章數(shù)據(jù)類型運(yùn)算符和表達(dá)式_第2頁
第二章數(shù)據(jù)類型運(yùn)算符和表達(dá)式_第3頁
第二章數(shù)據(jù)類型運(yùn)算符和表達(dá)式_第4頁
第二章數(shù)據(jù)類型運(yùn)算符和表達(dá)式_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式VC++的數(shù)據(jù)類型基本運(yùn)算符表達(dá)式語句、空語句及自增、自減運(yùn)算符VC++的數(shù)據(jù)類型關(guān)鍵字標(biāo)識符標(biāo)點(diǎn)符號分隔符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)識符標(biāo)識符的定義以字母或下劃線開始的字母、數(shù)字以及下劃線組成的字符序列稱為標(biāo)識符。標(biāo)識符的有效長度VC++中,標(biāo)識符的有效長度為1~247個(gè)字符標(biāo)識符的命名方法Windows標(biāo)準(zhǔn)命名法(匈牙利法)意義法 2.1.2標(biāo)點(diǎn)符號C++中的標(biāo)點(diǎn)符號共有9個(gè):#、(、)、{、}、,、:、;、…標(biāo)點(diǎn)符號不表示任何操作同一個(gè)符號在不同的應(yīng)用場合,其作用與含義是不同的例如“,”既可做為標(biāo)點(diǎn)符號,又可作為運(yùn)算符使用2.1.3分隔符C++源程序中每一個(gè)詞法符號之間必須用分隔符分隔開C++中的分隔符有:運(yùn)算符、空格、標(biāo)點(diǎn)符號、回車鍵和Tab鍵注解也可以用作分隔符2.1.4C++的基本數(shù)據(jù)類型描述一個(gè)數(shù)據(jù)需要兩方面的信息:一是數(shù)據(jù)所占用的存儲空間的大?。ㄗ止?jié)數(shù)),二是該數(shù)據(jù)所允許執(zhí)行的操作或運(yùn)算。為了便于對數(shù)據(jù)進(jìn)行操作和加工,需要對數(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ù)類型:有符號(signed)、無符號(unsigned)、長(long)、短 (short)。以上四個(gè)修飾詞來修飾int時(shí),關(guān)鍵字int可以省略。無修飾詞的int和char,編譯程序認(rèn)為是有符號的。常量在程序的執(zhí)行過程中,值保持不變(也不能被改變)的量稱為常量。字面常量標(biāo)識符常量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長整型常量:以L

或l

結(jié)尾的整數(shù),比如:123L,824l無符號整形常量:以U或u結(jié)尾的整數(shù),比如:123u,824U實(shí)型常量十進(jìn)制小數(shù)形式:比如,1.23指數(shù)形式:格式為<小數(shù)>E(或e)<指數(shù)>,比如,2e3表示2000,2E-4表示0.0002字符型常量用單引號括起來的單個(gè)字符叫字符型常量。字符常量在計(jì)算機(jī)內(nèi)是采用該字符的ASCII編碼值來表示的,其數(shù)據(jù)類型為char。注意三個(gè)字符:‘“\,不能直接表示為‘‘’,‘”’,‘\’,而必須采用轉(zhuǎn)義序列方法。

轉(zhuǎn)義序列方法反斜杠+字母:表示控制字符,比如‘\a’表示響鈴,‘\n’表示回車符。反斜杠+特殊字符(‘,“,\),表示該字符。比如,’\\‘表示反斜杠“\”,’\‘’表示單引號“‘”。反斜杠+整型常量:此時(shí)整型常量必須是一個(gè)八進(jìn)制或十六進(jìn)制數(shù)(以X或x開頭),其取值通常在0~255之間,此時(shí),如果在整數(shù)之前沒有0,表示八進(jìn)制。比如:‘\141’、‘\X61’都與‘a(chǎn)’等價(jià)。字符串常量用雙引號括起來的若干個(gè)字符。當(dāng)雙引號(“)或反斜杠(\)作為字符串中的一個(gè)字符時(shí),必須采用轉(zhuǎn)義序列法;而單引號(‘)出現(xiàn)在字符串中時(shí),可采用或不采用轉(zhuǎn)義序列法。字符串常量和字符常量的區(qū)別在每一個(gè)字符串常量的末尾,存儲時(shí)都要存放一個(gè)“0”,表示字符串的結(jié)束符字符串常量不能直接運(yùn)用一些運(yùn)算,比如算術(shù)運(yùn)算、比較運(yùn)算等,而字符常量可以標(biāo)識符常量用標(biāo)識符表示的常量??捎脙煞N方法定義標(biāo)識符常量:利用編譯預(yù)處理指令。利用關(guān)鍵字define,以如下形式定義常量: #definePI3.14159利用常量說明符const。比如:

constI=2;注意,標(biāo)識符常量一經(jīng)定義,在其后繼的程序中就不能改變其值。例2-1變量在程序的執(zhí)行過程中,可改變其值的量稱為變量。根據(jù)其取值不同,變量可分為不同類型的變量:比如,整型變量、實(shí)型變量、字符型變量、構(gòu)造型變量、指針型變量等。對于任一變量,編譯程序要為其分配若干個(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í),稱為對變量的賦值;取一個(gè)變量的值時(shí),稱為對變量引用;變量的賦值與初始化變量的值可以通過賦值語句而得到改變。比如,假設(shè)有一個(gè)整型變量a,則通過如下語句就可以改變a的值: a=2;當(dāng)引用某個(gè)變量時(shí),該變量必須有一個(gè)唯一確定的值。首次給變量賦值稱為對變量賦初值,或變量的初始化??梢杂萌N方法給變量賦初值:在變量說明時(shí),直接賦初值;使用賦值語句賦初值;通過輸入流cin等其它方法?;具\(yùn)算符在C++中,對數(shù)據(jù)(變量或常量)進(jìn)行運(yùn)算或處理是通過運(yùn)算符進(jìn)行的。所謂運(yùn)算符就是表示某種特定運(yùn)算形式簡單的記號。參與運(yùn)算的對象稱為操作數(shù)。數(shù)據(jù)與運(yùn)算符一起構(gòu)成表達(dá)式,它描述對哪些數(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)先級與結(jié)合性(表1.3)

運(yùn)算符的結(jié)合性規(guī)定了優(yōu)先級相同的運(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ù)號)C++中有雙目運(yùn)算符:+-*/%算術(shù)運(yùn)算符都是右結(jié)合的,它們之間的優(yōu)先級與數(shù)學(xué)中一致。可用括號()來改變運(yùn)算符的優(yōu)先順序,先計(jì)算括號內(nèi)的值,再計(jì)算括號外的值對于雙目運(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)算是對兩個(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ī)存儲和運(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)算符是對其操作數(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)算符

比如:對于整型數(shù)a,其二進(jìn)制值為110101,則~a為0xffffffca。計(jì)算過程如下:由于a是整型,故在存儲空間中占4個(gè)字節(jié),共32位,因此a的低8位為00110101,而高位都為0,因此按位取反之后高位都為1,而低8為為11001010,即0xffffffca按位與(&)將兩個(gè)操作數(shù)的對應(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ù)對應(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ù)的對應(yīng)的二進(jìn)制位分別進(jìn)行邏輯異或運(yùn)算。該運(yùn)算符為雙目運(yùn)算符。邏輯異或的運(yùn)算規(guī)則為:僅當(dāng)兩操作數(shù)的在某位對應(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)制形式中的各位依次向左移動b位,移動的結(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)制形式中的各位依次向右移動b位,移動的結(jié)果作為該運(yùn)算的返回值,但a的值保持不變。對一個(gè)整數(shù)右移n位,相當(dāng)于將該數(shù)除以2n,并忽略小數(shù)部分

賦值運(yùn)算符C++中賦值運(yùn)算符分為兩種:

單一賦值運(yùn)算符。即等號“=”。該運(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ù)必須在括號內(nèi),其使用格式為:

sizeof(<類型>)或sizeof(<表達(dá)式>)其中前一種格式中<類型>可以是任意一種基本數(shù)據(jù)類型或用戶自定義類型。后一種格式用于計(jì)算<表達(dá)式>結(jié)果所屬類型所占用的字節(jié)數(shù)。例如

sizeof(int) //對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á)式等等。最簡單的表達(dá)式是常量和變量。根據(jù)運(yùn)算符的類型的不同,可將表達(dá)式分為五類:算術(shù)表達(dá)式邏輯表達(dá)式關(guān)系表達(dá)式賦值表達(dá)式逗號表達(dá)式2.2.2算術(shù)表達(dá)式算術(shù)表達(dá)式是由算術(shù)運(yùn)算符和操作數(shù)組成的,能求出其值的式子。操作數(shù)可以是任意基本類型的數(shù)據(jù)。

在求算術(shù)表達(dá)式的值的過程中,要按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,即先算乘除,后算加減。相鄰兩個(gè)運(yùn)算符的優(yōu)先級相同,則按規(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。對于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á)式的副作用對于a&&b&&c,只有a為非0時(shí),才需要計(jì)算b的值,因?yàn)楫?dāng)a為0時(shí),不管后面的項(xiàng)如何,都能得到該表達(dá)式的值就為0。同樣只有在a和b都為非0的情況下才需要計(jì)算c的值。

對于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)先級,等價(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)算,注意:括號不能省

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)逗號表達(dá)式逗號表達(dá)式是用逗號運(yùn)算符將表達(dá)式連起來組成的式子。逗號運(yùn)算符的優(yōu)先級為所有運(yùn)算符中最低的。逗號運(yùn)算符的結(jié)合性為右結(jié)合,且整個(gè)逗號表達(dá)式的值和類型與最后一個(gè)表達(dá)式的值和類型一致。例如

自增自減運(yùn)算符在逗號表達(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,即該逗號表達(dá)式的值為7。這里若用++a代替a++,則所得到的結(jié)果一樣。

自增自減運(yùn)算符在逗號表達(dá)式中與在其它表達(dá)式中的運(yùn)算規(guī)則是不一樣的。試比較:

inta=2,b;a++>(b=a);//執(zhí)行該語句后,得到a=3,b=2。這里前置自增和后置自增的結(jié)果不同

類型轉(zhuǎn)換在求表達(dá)式值的過程中,對于二目運(yùn)算符,通常會出現(xiàn)兩個(gè)操作數(shù)的類型不一致的情形,這時(shí)就要求將這兩個(gè)操作數(shù)轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。一般情況下,C++會進(jìn)行自動轉(zhuǎn)換,當(dāng)然也可以強(qiáng)制轉(zhuǎn)換。

不同類型數(shù)據(jù)運(yùn)算的自動轉(zhuǎn)換規(guī)則

不同類型之間賦值的自動轉(zhuǎn)換規(guī)則

強(qiáng)制類型轉(zhuǎn)換

2.2.3不同類型數(shù)據(jù)運(yùn)算的自動轉(zhuǎn)換規(guī)則當(dāng)操作數(shù)的類型為字符型或短整型(包括加上signed、unsigned修飾詞)時(shí),系統(tǒ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。

對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á)式的值。

不同類型之間賦值的自動轉(zhuǎn)換規(guī)則 當(dāng)賦值運(yùn)算符右操作數(shù)的類型與左左操作數(shù)(變量)的類型不一致時(shí),如果它們可進(jìn)行轉(zhuǎn)換(稱它們相互兼容),則系統(tǒng)自動對它們進(jìn)行轉(zhuǎn)換。規(guī)則如下:將實(shí)型數(shù)(雙精度型)賦給整型變量將字符型數(shù)據(jù)賦給整型變量其它情形對于以上的各種形式的自動轉(zhuǎn)換,編譯系統(tǒng)在編譯時(shí)可能會給出一些警告信息。如要避免警告信息,可采取強(qiáng)制轉(zhuǎn)換的方式。將實(shí)型數(shù)(雙精度型)賦給整型變量將實(shí)型數(shù)(雙精度型)賦給整型變量時(shí),只取實(shí)型數(shù)的整數(shù)部分,舍去小數(shù)部分。當(dāng)其整數(shù)部分超過整數(shù)的范圍時(shí),賦值的結(jié)果錯(cuò)誤。

將字符型數(shù)據(jù)賦給整型變量 根據(jù)字符類型的不同,可分兩種情況:

(a)對于無符號字符類型,將該字符型數(shù)據(jù)的二進(jìn)制形式的八位數(shù)直接賦給整型變量二進(jìn)制形式的低八位,再將整型變量的高位補(bǔ)0。

(b)對于有符號字符類型,若符號位為0,則與無符號字符類型的轉(zhuǎn)換方式相同;如符號位為1,則將將該字符型數(shù)據(jù)的二進(jìn)制形式的八位數(shù)直接賦給整型變量二進(jìn)制形式的低八位,再將高位補(bǔ)1。例如

signedcharch=249;inta=ch;則a的值為-7。轉(zhuǎn)換過程可用下圖表示:

1111100111111001111111111111111111111111低八位高位字符型數(shù)據(jù)ch整型變量a其它情形對于其它情形,當(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)換為<類型名>所指定的類型。

對于第一種形式,要注意強(qiáng)制類型轉(zhuǎn)換運(yùn)算符“()”的優(yōu)先級為第2級。例如

(float)3/4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論