第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式
2.1 C++語言的數(shù)據(jù)類型
C+ +中的數(shù)據(jù)類型大體可以分成三類,它們是:基本類型、導(dǎo)出類型和用戶定義類型。
1.基本類型
(1)邏輯型
邏輯型用關(guān)鍵字bool表示,因此又稱為bool型(布爾型)。邏輯型的取值范圍只包含true和false,它們都是C+ +關(guān)鍵字。
(2)字符型
字符型用關(guān)鍵字char表示,因此又稱為char型,即把字符作為一種數(shù)據(jù)進(jìn)行操作。字符型的取值范圍是全部基本字符以及ASCII碼集或擴(kuò)充ASCII碼集對(duì)應(yīng)的全部符號(hào)。
(3)整型
整型用關(guān)鍵字int表示,因此又稱為int型,它是C+ +中最常用的數(shù)據(jù)類型,整型數(shù)據(jù)的取值范圍是計(jì)算機(jī)所能表示的所有整數(shù)。
(4)浮點(diǎn)型
浮點(diǎn)型包括單精度型和雙精度型兩種,單精度型用關(guān)鍵字float表示,又稱float型;雙精度型用關(guān)鍵字double表示,又稱double型。它們對(duì)應(yīng)著數(shù)學(xué)中實(shí)數(shù)的概念,即帶有小數(shù)點(diǎn)的數(shù)。
浮點(diǎn)型數(shù)據(jù)的取值范圍原則上是任意大小和精度的小數(shù),但實(shí)際上不可能是任意大小的,而是有一定范圍的。C+ +中的浮點(diǎn)數(shù)可以采用尾數(shù)加階碼的表示形式,表示的浮點(diǎn)數(shù)范圍是:?jiǎn)尉刃?3.4E38~3.4E38,但不能超過7位有效數(shù)字;雙精度型-1.7977E308~1.7977E308 ,但不能超過15位有效數(shù)字。
(5)空值型
空值型用關(guān)鍵字void表示,因此又稱為void型?罩敌偷娜≈禐榭铡+ +中不存在void型的常量或變量。C+ +語言規(guī)定,所有函數(shù)說明都必須指明返回值類型,沒有返回值的函數(shù)應(yīng)說明為void類型的函數(shù);另外,void類型還可以用來聲明一個(gè)指針變量。
2.基本類型的派生類型
C+ +語言中,基本類型的字長(zhǎng)及其取值范圍可以放大和縮小,改變后的類型就叫做基本類型的派生類型。派生類型聲明符是由基本類型關(guān)鍵字char、int、float、double前面加上類型修飾符組成的。類型修飾符包括:
short 短類型,縮短字長(zhǎng);
long長(zhǎng)類型,加長(zhǎng)字長(zhǎng);
signed有符號(hào)類型,取值范圍包括正負(fù)值;
unsigned無符號(hào)類型,取值范圍只包括正值;
2.2 常量
常量是指在程序執(zhí)行過程中值不改變的量。常量有兩種表示形式,即字面常量和符號(hào)常量。字面常量的類型是根據(jù)書寫形式來區(qū)分的,它們的類型分別為:整型、浮點(diǎn)型、字符型、字符串型,每個(gè)字面常量的字面本身就是它的值。符號(hào)常量是一個(gè)標(biāo)識(shí)符,在程序中必須遵循“先聲明,后使用”的原則。
1.邏輯常量
邏輯常量主要用在邏輯運(yùn)算中,此外,由于邏輯值對(duì)應(yīng)著整數(shù)1或0,所以它也能夠像其他整數(shù)一樣出現(xiàn)在表達(dá)式中,參與各種整數(shù)運(yùn)算。
2.字符常量
字符常量簡(jiǎn)稱字符,它以單引號(hào)作為起止符號(hào),中間有一個(gè)或若干個(gè)字符。這是一般意義上的字符常量;除此之外還有一種特殊形式的字符常量,以“\”開頭的包括多個(gè)字符的字符序列也是符合規(guī)定的字符常量。但是,無論字符常量包含一個(gè)還是多個(gè)字符,每個(gè)字符常量只能表示一個(gè)字符,當(dāng)字符常量的一對(duì)單引號(hào)內(nèi)多于一個(gè)字符時(shí),則將按照一定的規(guī)則解釋為一個(gè)字符。
計(jì)算機(jī)中常用的ASCII字符也是字符型的數(shù)據(jù),因?yàn)锳SCII碼值在0~127之間,正好落在字符型數(shù)據(jù)的取值范圍之內(nèi)。ASCII字符集中的每一個(gè)顯示字符(個(gè)別字符除外)都可以作為一個(gè)字符常量。但是,對(duì)于一些特殊的字符,如回車、換行等具有控制功能的字符,或者像單引號(hào)、雙引號(hào)等作為特殊標(biāo)記使用的字符,就無法直接采用單引號(hào)作為起止符號(hào)來表示。C+ +中引入了“轉(zhuǎn)義”字符的概念,其含義是:用反斜線“\”引導(dǎo)的下一個(gè)字符失去了原來的含義,而轉(zhuǎn)義為具有某種控制功能的字符。另外,還允許用反斜線引導(dǎo)一個(gè)具有1至3位的八進(jìn)制整數(shù)或一個(gè)以字母x(大、小寫均可)作為開始標(biāo)記的具有1至2位的十六進(jìn)制整數(shù),對(duì)應(yīng)的字符就是以這個(gè)整數(shù)作為ASCII碼的字符。
3.整型常量
整型常量就是整型常數(shù),簡(jiǎn)稱整數(shù),它有十進(jìn)制、八進(jìn)制和十六進(jìn)制3種表示。
(1)十進(jìn)制整數(shù)
十進(jìn)制整數(shù)以正號(hào)(+)或負(fù)號(hào)(-)開頭,由首位非0的一串十進(jìn)制數(shù)字組成。若以正號(hào)開頭則為正數(shù),若以負(fù)號(hào)開頭則為負(fù)數(shù),若省略正負(fù)號(hào),則默認(rèn)為正數(shù)。
當(dāng)一個(gè)十進(jìn)制整數(shù)大于等于-2 147 483 648(即231),同時(shí)小于等于2 147 483 647(即-231-1)時(shí),則被系統(tǒng)看作是整型常量;當(dāng)在2 147 483 648~4 294 967 295即232-1范圍之內(nèi)時(shí),則被看作是無符號(hào)整型常量;當(dāng)超過上述兩個(gè)范圍時(shí),則無法用C+ +整數(shù)類型表示,只有把它用實(shí)數(shù)(即帶小數(shù)點(diǎn)的數(shù))表示才能夠被有效地存儲(chǔ)和處理。
(2)八進(jìn)制整數(shù)
八進(jìn)制整數(shù)以數(shù)字0開頭,后面接若干個(gè)八進(jìn)制數(shù)字(借用十進(jìn)制數(shù)字中的0~7)。八進(jìn)制整數(shù)前面不帶正負(fù)號(hào),全部默認(rèn)為正數(shù)。
當(dāng)一個(gè)八進(jìn)制整數(shù)大于等于0同時(shí)小于等于017777777777時(shí),則稱為整型常量,當(dāng)大于等于020000000000同時(shí)小于等于037777777777時(shí),則稱為無符號(hào)整型數(shù)量。不要使用超過上述兩個(gè)范圍的八進(jìn)制整數(shù),因?yàn)闆]有與此相對(duì)應(yīng)的C+ +整數(shù)類型。
(3)十六進(jìn)制整數(shù)
十六進(jìn)制整數(shù)以數(shù)字0和字母x(大、小寫均可)開頭,后面接若干個(gè)十六進(jìn)制數(shù)字(借用十進(jìn)制數(shù)字0~9,字母A~F或a~f)。
當(dāng)一個(gè)十六進(jìn)制整數(shù)大于等于0同時(shí)小于等于0x7FFFFFFF時(shí),則稱為整型常量,當(dāng)大于等于0x80000000同時(shí)小于等于0xFFFFFFFF時(shí),則稱為無符號(hào)整型常量,與八進(jìn)制整數(shù)類似,超過上述兩個(gè)范圍的十六進(jìn)制整數(shù)也沒有與之相對(duì)應(yīng)的C+ +整數(shù)類型,所以也不能使用它們。
C+ +中的整型數(shù)據(jù)除了一般表示方法之外,還允許給它們添加后綴u或l。對(duì)于任一種進(jìn)制的整數(shù),若后綴為字母u(大、小寫均可),則規(guī)定它為一個(gè)無符號(hào)整型(unsigned int)數(shù),若后綴為字母l(大、小寫均可),則規(guī)定它為一個(gè)長(zhǎng)整型(long int)數(shù)。在一個(gè)整數(shù)的末尾,可以同時(shí)使用u和l,并且對(duì)排列無要求。
4.實(shí)型常量
實(shí)型常量有十進(jìn)制的定點(diǎn)和浮點(diǎn)兩種表示方法,但并不存在其他進(jìn)制的表示,下面分別介紹這兩種表示方法。
(1)定點(diǎn)表示
定點(diǎn)表示的實(shí)數(shù)簡(jiǎn)稱定點(diǎn)數(shù),實(shí)際上是以小數(shù)形式表示實(shí)數(shù)。定點(diǎn)表示的實(shí)數(shù)是由一個(gè)正號(hào)或負(fù)號(hào)(正號(hào)可以省略)后接若干個(gè)十進(jìn)制數(shù)字和一個(gè)小數(shù)點(diǎn)所組成,這個(gè)小數(shù)點(diǎn)可以處在任何一個(gè)數(shù)字位的前面或后面。
(2)浮點(diǎn)表示
浮點(diǎn)表示的實(shí)數(shù)簡(jiǎn)稱浮點(diǎn)數(shù),實(shí)際上是以指數(shù)形式表示實(shí)數(shù)。浮點(diǎn)表示的實(shí)數(shù)是由一個(gè)十進(jìn)制整數(shù)或定點(diǎn)數(shù)后接一個(gè)字母E(大、小寫均可)和一個(gè)1至3位的十進(jìn)制整數(shù)所組成,字母E之前的部分稱為該浮點(diǎn)數(shù)的尾數(shù),之后的部分成為該浮點(diǎn)數(shù)的指數(shù),該浮點(diǎn)數(shù)的值就是它的尾數(shù)乘以10的指數(shù)冪。
對(duì)于一個(gè)浮點(diǎn)數(shù),若將它尾數(shù)中的小數(shù)點(diǎn)調(diào)整到最左邊第一個(gè)非零數(shù)字的后面,則稱它為規(guī)格化(或標(biāo)準(zhǔn)化)浮點(diǎn)數(shù)。
實(shí)型常量分為單精度(float)、雙精度(double)和長(zhǎng)雙精度(long double)三類。一般float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié),提供7位有效數(shù)字;double型數(shù)據(jù)占8個(gè)字節(jié),提供15位有效數(shù)字;long double型數(shù)據(jù)占10個(gè)字節(jié),提供19位有效數(shù)字。對(duì)于一個(gè)定點(diǎn)數(shù)或浮點(diǎn)數(shù),C+ +自動(dòng)按一個(gè)雙精度數(shù)(double型)來存儲(chǔ)。若在一個(gè)定點(diǎn)數(shù)或浮點(diǎn)數(shù)之后加上字母F(大、小寫均可),則自動(dòng)按一個(gè)單精度數(shù)來存儲(chǔ)。
5.枚舉常量
枚舉常量是枚舉類型中定義的值,即枚舉植。枚舉類型屬于用戶定義類型,用關(guān)鍵字enum表示,因此又稱為enum類型。用戶通常利用枚舉類型定義程序中需要使用的一組相關(guān)符號(hào)常量。聲明枚舉類型的語法格式為:
enum<類型名>{<枚舉值表>};
其中,enum是關(guān)鍵字,指出要定義的是枚舉類型。<類型名>是標(biāo)識(shí)符,即由用戶給出的具體枚舉類型名。<枚舉值表>包含多個(gè)枚舉值,它們用逗號(hào)分隔開,每個(gè)枚舉值就是一個(gè)枚舉常量。枚舉值有兩種定義形式:一是<值名>;二是<值名>=<整型常量>。
關(guān)于enum類型有四點(diǎn)說明:
(1)一個(gè)enum類型實(shí)際上是int類型的一個(gè)子集,其每一個(gè)枚舉值代表一個(gè)整數(shù)。
(2)n個(gè)枚舉值全部未賦常量值時(shí),它們自左至右分別與整數(shù)0,1…n-1對(duì)應(yīng)。
(3)若第i個(gè)枚舉值賦常量值為m,則其未賦常量值的后續(xù)枚舉值分別與整數(shù)m+1,m+2…對(duì)應(yīng),直到下一個(gè)賦了值的枚舉值或結(jié)束。因此,為枚舉值所賦的整型常量值應(yīng)從左至右遞增。
(4)枚舉類型的聲明也可作為成組聲明若干整型符號(hào)常量的方法。也就是說,把每個(gè)要聲明的符號(hào)常量作為一個(gè)枚舉值,將各個(gè)枚舉值合在一起定義成一個(gè)枚舉類型。
由于枚舉類型屬于用戶定義數(shù)據(jù)類型,一旦枚舉類型被定義后就可以使用它來定義變量。
2.3 變量
1.變量的定義
變量的定義是通過變量聲明語句來實(shí)現(xiàn)的,變量聲明語句的一般格式為:
[<存儲(chǔ)類>]<類型名><變量名>[=<初值表達(dá)式>],...;
<存儲(chǔ)類>有四種,它們分別是auto、register、static、extern。
<類型名>為已存在的一種數(shù)據(jù)類型名稱,如char,short,int,long,float,double等基本數(shù)據(jù)類型名,或者用戶定義的數(shù)據(jù)類型名。
<變量名>是用戶定義的一個(gè)標(biāo)識(shí)符,用來表示一個(gè)變量,該變量可以通過后面的可選項(xiàng)賦予一個(gè)值,稱為給變量賦初值,也叫做對(duì)變量進(jìn)行初始化。C+ +中標(biāo)識(shí)符是區(qū)分大小寫的,也就是說,大寫字母和小寫字母被認(rèn)為是不同的字母。
變量名的命名遵循如下規(guī)則:
(1) 不能是C+ +關(guān)鍵字;
(2)第一個(gè)字符必須是字母或下劃線;
(3)中間不能有空格;
(4)變量名中不能包括;,′″+-之類的特殊符號(hào)。
實(shí)際上變量名中除了能使用26個(gè)英文大小寫字母和數(shù)字外,只能使用下劃線“_”。
2變量的使用方式
(1)全局變量和局部變量
全局變量是在所有函數(shù)定義、類定義和程序塊之外聲明的變量。聲明全局變量時(shí)如果在程序中不對(duì)它進(jìn)行專門的初始化,該變量會(huì)被系統(tǒng)自動(dòng)初始化為0。在程序的任何一個(gè)函數(shù)、類或程序塊之內(nèi)均可以訪問全局變量。
局部變量是在某個(gè)函數(shù)定義、類定義或程序塊之內(nèi)聲明的變量。局部變量只能在聲明它的函數(shù)、類或程序塊中被訪問。
(2)生存期與作用域
生存期是指從一個(gè)變量被聲明且分配了內(nèi)存開始,直到該變量聲明語句失效,它占用的內(nèi)存空間被釋放為止。一個(gè)全局變量的生存期從它被聲明開始,直到程序結(jié)束;一個(gè)局部變量的生存期從它被聲明開始,直到包含它的最近的一個(gè)程序塊結(jié)束。
作用域是指變量名可以代表該變量存儲(chǔ)空間的使用范圍。
一般情況下,變量的作用域與其生存期一致,但由于C+ +語言允許在程序的不同部分為不同變量取同一名字,因此一個(gè)變量名的作用域可能小于其生存期。
(3)變量的存儲(chǔ)類屬性
在C+ +中變量還可以按存儲(chǔ)分配方式的不同被劃分為4種不同的存儲(chǔ)類別,它們分別是:
、賏uto變量:用關(guān)鍵字auto聲明的局部變量稱為自動(dòng)變量。auto為變量聲明時(shí)的默認(rèn)存儲(chǔ)類別,即在變量定義時(shí),如果不顯式標(biāo)明存儲(chǔ)類別,則系統(tǒng)自動(dòng)按auto變量處理。auto變量所占用存儲(chǔ)空間的分配和釋放工作將由系統(tǒng)自動(dòng)完成。
、趓egister變量:用關(guān)鍵字register聲明的局部變量稱為寄存器變量。register變量可能以寄存器作為其存儲(chǔ)空間。聲明寄存器變量時(shí),關(guān)鍵字register的作用只能是建議(而不是強(qiáng)制)系統(tǒng)使用寄存器,原因是寄存器雖然存取速度快,但空間有限,當(dāng)寄存器不夠用時(shí),該變量仍然按自動(dòng)變量處理。
、踫tatic變量:用關(guān)鍵字static聲明的變量稱為靜態(tài)變量。任何靜態(tài)變量的生存期將延續(xù)到整個(gè)程序的終止。與全局變量一樣,為靜態(tài)變量分配的存儲(chǔ)空間在整個(gè)程序運(yùn)行過程中不再被釋放;如果靜態(tài)變量未被賦初值,系統(tǒng)將自動(dòng)為其賦初值為0。
、躤xtern變量:用關(guān)鍵字extern聲明的變量稱為外部變量。變量一旦被聲明為外部變量,系統(tǒng)就不必像一般變量那樣為其分配內(nèi)存,因?yàn)樵撟兞恳言谶@一局部的外面被定義。外部變量一般用于多個(gè)文件組成的程序中,有些變量在多個(gè)文件中被聲明,但卻是指同一變量。標(biāo)明某一變量為外部變量可以避免為其重復(fù)分配內(nèi)存。
(4)typedef類型說明
使用關(guān)鍵字typedef可以為已有類型名定義一個(gè)新類型名。其語法格式為:
typedef<已有類型名><新類型名>
typedef類型說明并沒有真正地定義新的數(shù)據(jù)類型,它只是相當(dāng)于給某個(gè)已有的數(shù)據(jù)類型起了一個(gè)別名。在規(guī)模較大的程序中為了提高代碼可讀性常采用這種形式。
3符號(hào)常量聲明語句
符號(hào)常量在使用之前必須先進(jìn)行聲明。符號(hào)常量聲明語句同變量聲明語句類似,其語法格式為:
const<類型名><符號(hào)常量名><初值表達(dá)式>……;
其中,關(guān)鍵字const指明這是一條符號(hào)常量聲明語句,后面跟著符號(hào)常量的類型名,接著是符號(hào)常量名,它是一個(gè)用戶定義的標(biāo)識(shí)符,符號(hào)常量名之后為一個(gè)賦值號(hào)和一個(gè)初值表達(dá)式。由此可見,必須在聲明符號(hào)常量的同時(shí)為其賦初值。該語句也可以聲明多個(gè)符號(hào)常量。
系統(tǒng)執(zhí)行符號(hào)常量聲明語句時(shí),需要依次為每個(gè)符號(hào)常量分配存儲(chǔ)單元并賦初值。一個(gè)符號(hào)常量被聲明后,它的值就是聲明所賦予的初值,作為常量,這個(gè)值以后將始終保持不變,因?yàn)橄到y(tǒng)只允許讀取它的值,而不允許再次向它賦值。另外,在符號(hào)常量聲明語句中,若<類型名>為int,則int可省略。
符號(hào)常量聲明語句既可以出現(xiàn)在函數(shù)體外,也可以出現(xiàn)在函數(shù)體內(nèi),這一點(diǎn)也跟變量定義語句相同。
C+ +關(guān)鍵字中的true和false就是系統(tǒng)預(yù)先定義的兩個(gè)符號(hào)常量,它們的值分別為1和0。使用符號(hào)常量往往可以提高程序的可讀性和可維護(hù)性。由于符號(hào)常量和變量同樣要求系統(tǒng)為其分配內(nèi)存單元,所以可以把符號(hào)變量視為一種不允許賦值改變的或只讀不寫的變量,稱其為const變量。
4使用#define命令定義符號(hào)常量
# define命令是一條預(yù)處理命令,也可以用它來定義符號(hào)常量。其命令格式為:
#define<符號(hào)常量名><字符序列>
<符號(hào)常量名>是用戶定義的標(biāo)識(shí)符,又稱為宏或宏標(biāo)識(shí)符;<字符序列>也是由用戶給定的用來代替宏的一串字符序列,也稱為宏替換體,它可以是數(shù)值常量、可計(jì)算值的表達(dá)式或字符串。宏被該命令定義后就可以使用在其后的程序中。當(dāng)程序被編譯時(shí)將把所有地方使用的宏標(biāo)識(shí)符替換為對(duì)應(yīng)的字符序列,并把宏命令刪除掉。
2.4 運(yùn)算符和表達(dá)式
1運(yùn)算符和表達(dá)式的概念
C+ +語言中的運(yùn)算符又稱為操作符,是用來對(duì)數(shù)據(jù)進(jìn)行運(yùn)算的符號(hào)。
C+ +語言中的運(yùn)算符可以根據(jù)其運(yùn)算分量個(gè)數(shù)的多少分為單目(或一元)運(yùn)算符、雙目(或二元)運(yùn)算符和三目(或三元)運(yùn)算符3類。
運(yùn)算符可能是一個(gè)字符,也可能由兩個(gè)或三個(gè)字符組成,還有一些運(yùn)算符是C+ +關(guān)鍵字。
2運(yùn)算類型與運(yùn)算符
C+ +包含多種不同種類的運(yùn)算。每一種運(yùn)算與其他運(yùn)算的區(qū)別在于以下3個(gè)方面:
(1)參加運(yùn)算的運(yùn)算分量的數(shù)量和類型;
(2)運(yùn)算結(jié)果的數(shù)據(jù)類型;
(3)運(yùn)算的具體操作。
3賦值運(yùn)算
賦值運(yùn)算是一種雙目運(yùn)算,其形式為:
<變量名>=<表達(dá)式>
右運(yùn)算分量為一個(gè)表達(dá)式。“=”為賦值運(yùn)算符(與數(shù)學(xué)中的等號(hào)含義不同)。左運(yùn)算分量為與右運(yùn)算分量類型相同的變量。
賦值運(yùn)算的具體操作為:先計(jì)算右端表達(dá)式的值,然后把該值賦給左端變量。
4算術(shù)運(yùn)算符和算術(shù)表達(dá)式
算術(shù)運(yùn)算是指int型、float型、double(也包括char型)的數(shù)值類數(shù)據(jù)計(jì)算后,得到同一類型數(shù)據(jù)的運(yùn)算。算術(shù)運(yùn)算中所使用的運(yùn)算符稱為算術(shù)運(yùn)算符。
單目算術(shù)運(yùn)算符包括:-(單減)、+ +(增量)和- -(減量)。
單減運(yùn)算的格式為:-<運(yùn)算分量>
單減運(yùn)算相當(dāng)于對(duì)運(yùn)算分量取相反數(shù),例如:-a,-(x+y)。
增量運(yùn)算有兩種形式。
前綴增量:+ +<運(yùn)算分量>
后綴增量:<運(yùn)算分量>+ +
雙目算術(shù)運(yùn)算符包括:+(加)、-(減)、*(乘)、/(除)和%(取余)。它們的含義與數(shù)學(xué)上相同。該類運(yùn)算的運(yùn)算分量為任一種數(shù)值類型,即任一種整數(shù)類型和任一種實(shí)數(shù)類型。
由算術(shù)運(yùn)算符(包括單目和雙目)連接運(yùn)算分量而組成的式子稱為算術(shù)表達(dá)式。每個(gè)算術(shù)表達(dá)式的值為一個(gè)數(shù)值,其類型按照以下規(guī)則確定:
(1)當(dāng)參加運(yùn)算的兩個(gè)運(yùn)算分量均為整型時(shí)(但具體類型可以不同,如一個(gè)為int型,另一個(gè)為char型),則運(yùn)算結(jié)果為int型。
(2)當(dāng)參加運(yùn)算的兩個(gè)運(yùn)算分量中至少有一個(gè)是單精度型,并且另一個(gè)不是雙精度型時(shí),則運(yùn)算結(jié)果為float型。
(3)當(dāng)參加運(yùn)算的兩個(gè)運(yùn)算分量中至少有一個(gè)是雙精度型時(shí),則運(yùn)算結(jié)果為雙精度型。
5關(guān)系運(yùn)算符和關(guān)系表達(dá)式
C+ +語言提供了6種關(guān)系運(yùn)算符,它們是:
<(小于)、< =(小于等于)、>(大于)、> =(大于等于)、= =(等于)、! =(不等于)
這6種運(yùn)算符都是雙目運(yùn)算符,用來比較兩個(gè)運(yùn)算分量的大小,運(yùn)算結(jié)果為邏輯型值true或false(它們分別對(duì)應(yīng)著整數(shù)1和0。由一個(gè)關(guān)系運(yùn)算符連接前后兩個(gè)數(shù)值表達(dá)式而構(gòu)成的式子稱為關(guān)系表達(dá)式,簡(jiǎn)稱關(guān)系式。當(dāng)一個(gè)關(guān)系式成立時(shí),則計(jì)算結(jié)果為邏輯值是(true),否則為邏輯值假(false)
關(guān)系運(yùn)算符的使用格式為:
<運(yùn)算分量><關(guān)系運(yùn)算符><運(yùn)算分量>
6邏輯運(yùn)算符和邏輯表達(dá)式
C+ +語言提供了3種邏輯運(yùn)算符,它們是:
!(邏輯非)、&&(邏輯與)、(邏輯或)
其中,!為單目運(yùn)算符,&&和為雙目運(yùn)算符。
邏輯運(yùn)算符的使用格式為:
<邏輯運(yùn)算符!><運(yùn)算分量>
<運(yùn)算分量><邏輯運(yùn)算符&&或><運(yùn)算分量>
邏輯運(yùn)算的具體操作步驟為:
(1)計(jì)算兩邊運(yùn)算分量的值;
(2)若運(yùn)算分量的值不是邏輯型,則自動(dòng)轉(zhuǎn)換為邏輯型,即以0值為假(即false),非0值為真(即true);
(3)按不同邏輯運(yùn)算符計(jì)算返回值。
7位運(yùn)算
C+ +提供6種位運(yùn)算符。
(1)“&”是按位與運(yùn)算符,它將兩個(gè)運(yùn)算分量的對(duì)應(yīng)二進(jìn)制位進(jìn)行與操作。基中,0 和0與得0,0和1與得0,1和0與得0,1和1與得1。
(2)“|”是按位或運(yùn)算符,它將兩個(gè)運(yùn)算分量的對(duì)應(yīng)二進(jìn)制位進(jìn)行或操作。其中,0和0或得0,0和1或得1,1和0或得1,1和1或得1。
(3)“^”是按位異或運(yùn)算符,它將兩個(gè)運(yùn)算分量的對(duì)應(yīng)二進(jìn)制位進(jìn)行異或操作。其中,0和0異或得0,0和1異或得1,1和0異或得1,1和1異或得0。
(4)“>>”是按位右移運(yùn)算符,由于右移的位數(shù)為右邊運(yùn)算分量的值,所以右邊運(yùn)算分量的值必須是一個(gè)整數(shù)。
(5)“<<”是按位左移運(yùn)算符,由于左移的位數(shù)為右邊運(yùn)算分量的值,所以右邊運(yùn)算分量的值必須是一個(gè)整數(shù)。
(6)“~”是按位取反運(yùn)算符,它將運(yùn)算分量的對(duì)應(yīng)二進(jìn)制數(shù)的每一位進(jìn)行取反操作。其中,0取反得1,1取反得0。
位運(yùn)算符的使用格式:
<運(yùn)算分量><雙目運(yùn)算符><運(yùn)算分量>
<單目運(yùn)算符><運(yùn)算分量>
8.其他運(yùn)算
(1)條件運(yùn)算符
條件運(yùn)算是C+ +中唯一的三目運(yùn)算,與其對(duì)應(yīng)的運(yùn)算符?:稱為條件運(yùn)算符。條件運(yùn)算符的使用格式為:
<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>
當(dāng)計(jì)算有條件運(yùn)算符構(gòu)成的表達(dá)式時(shí),首先計(jì)算<表達(dá)式1>,若其值非0,則計(jì)算出<表達(dá)式2>的值,并用這個(gè)值作為整個(gè)表達(dá)式的值;若<表達(dá)式1>的值為0,則計(jì)算出<表達(dá)式3>的值,并用這個(gè)值作為整個(gè)表達(dá)式的值。
(2)逗號(hào)運(yùn)算符
C+ +中使用逗號(hào)運(yùn)算符指明對(duì)多個(gè)表達(dá)式進(jìn)行順序求值。逗號(hào)運(yùn)算符的使用格式為:
<表達(dá)式1>,<表達(dá)式2>,……<表達(dá)式n>
其中,每個(gè)逗號(hào)都稱為逗號(hào)運(yùn)算符,整個(gè)式子稱為逗號(hào)表達(dá)式。上述逗號(hào)表達(dá)式的求值步驟為:從左向右依次計(jì)算<表達(dá)式1>、<表達(dá)式2>…<表達(dá)式n>的值;將<表達(dá)式n>(即最右端的表達(dá)式)的值作為整個(gè)逗號(hào)表達(dá)式的值。
(3)sizeof運(yùn)算符
使用運(yùn)算符sizeof可以進(jìn)行字長(zhǎng)提取操作,因此sizeof運(yùn)算符又稱為字長(zhǎng)提取符,它的使用格式為:
sizeof(<運(yùn)算分量>)
其中,sizeof為關(guān)鍵字;<運(yùn)算分量>既可以是一個(gè)類型名,也可以是一個(gè)表達(dá)式,當(dāng)作為<運(yùn)算分量>的表達(dá)式只包含一個(gè)變量名時(shí),圓括號(hào)()可以省略。
字長(zhǎng)提取運(yùn)算的結(jié)果為一個(gè)整數(shù),該整數(shù)表示指定的類型或變量的字節(jié)長(zhǎng)度,即在內(nèi)存中占用的字節(jié)(Byte)數(shù)。
(4)圓括號(hào)運(yùn)算符
C+ +中不僅將圓括號(hào)()歸為運(yùn)算符,而且根據(jù)不同的使用方式,可以對(duì)圓括號(hào)運(yùn)算符的功能作出以下3種不同的解釋:
、賵A括號(hào)用于函數(shù)調(diào)用。其格式為:
<函數(shù)名>(<實(shí)參表>)
、趫A括號(hào)用于強(qiáng)制類型轉(zhuǎn)換。其格式為:
(<類型名>)<表達(dá)式>
③圓括號(hào)用于類型構(gòu)造。其格式為:
<類型名>(<表達(dá)式>)
類型構(gòu)造是指使用圓括號(hào)中<表達(dá)式>的值來構(gòu)造一個(gè)具有目標(biāo)數(shù)據(jù)類型的值,要構(gòu)造的目標(biāo)數(shù)據(jù)類型由<類型名>指定。
、軘(shù)組下標(biāo)運(yùn)算符:[](下標(biāo))。
、葜羔樳\(yùn)算符:*(取地址)和&(值引用)。
、迍(dòng)態(tài)存儲(chǔ)分配運(yùn)算符:new(分配)和delete(釋放)。
、咦饔糜蛳薅ㄟ\(yùn)算符:::(類域或全局域)
9.優(yōu)先級(jí)和結(jié)合性
根據(jù)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,可以將表達(dá)式的計(jì)算順序規(guī)則總結(jié)為以下3條:
(1)優(yōu)先計(jì)算帶有括號(hào)的子表達(dá)式;
(2)在沒有括號(hào)的部分,依照運(yùn)算符優(yōu)先級(jí),由高到低進(jìn)行計(jì)算;
(3)具有相同優(yōu)先級(jí)的運(yùn)算符,按照結(jié)合性規(guī)定,依次進(jìn)行計(jì)算。
C+ +運(yùn)算符分成17個(gè)優(yōu)先級(jí),優(yōu)先級(jí)數(shù)字越小,表示運(yùn)算符優(yōu)先級(jí)越高。具有同一優(yōu)先級(jí)數(shù)字的運(yùn)算符,優(yōu)先級(jí)相同。單目運(yùn)算符、賦值運(yùn)算符和復(fù)合賦值運(yùn)算符是右結(jié)合的,其余所有運(yùn)算符都是左結(jié)合的。
編輯推薦:
權(quán)威預(yù)測(cè):2013年全國(guó)計(jì)算機(jī)等級(jí)考試時(shí)間
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |