![第2章數(shù)據(jù)類型與表達式_第1頁](http://file4.renrendoc.com/view/12b3ec32051a53c785ae252a68d24414/12b3ec32051a53c785ae252a68d244141.gif)
![第2章數(shù)據(jù)類型與表達式_第2頁](http://file4.renrendoc.com/view/12b3ec32051a53c785ae252a68d24414/12b3ec32051a53c785ae252a68d244142.gif)
![第2章數(shù)據(jù)類型與表達式_第3頁](http://file4.renrendoc.com/view/12b3ec32051a53c785ae252a68d24414/12b3ec32051a53c785ae252a68d244143.gif)
![第2章數(shù)據(jù)類型與表達式_第4頁](http://file4.renrendoc.com/view/12b3ec32051a53c785ae252a68d24414/12b3ec32051a53c785ae252a68d244144.gif)
![第2章數(shù)據(jù)類型與表達式_第5頁](http://file4.renrendoc.com/view/12b3ec32051a53c785ae252a68d24414/12b3ec32051a53c785ae252a68d244145.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第2章數(shù)據(jù)類型與表達式2.1C++詞法單位2.2數(shù)據(jù)類型2.3常量2.4變量2.5表達式2.6C++的運算符2.7算術運算符與算術表達式2.8賦值運算符與賦值表達式2.9逗號運算符與逗號表達式2.1C++詞法單位
2.1.1C++的字符集每種語言都使用一組字符來構(gòu)造有意義的語句。C++程序是用下列字符所組成的字符集寫成的。26個小寫字母;26個大寫字母;10個數(shù)字;其他符號。2.1.2關鍵字關鍵字(保留字),是系統(tǒng)預先定義好的,有著特殊含義的標識符。在程序中用到的其他名字(標識符)不能與C++的關鍵字有相同的拼法和大小寫,關鍵字也不能重新定義。C++關鍵字asmdoifreturntryautodoubleinlineshorttypedefbooldynamic_castintsignedtypeidbreakelselongsizeoftypenamecaseenummutablestaticunioncatchexplicitnamespacestatic_castunsignedcharexportnewstructusingclassexternoperatorswitchvirtualconstfalseprivatetemplatevoidconst_castfloatprotectedthisvolatilecontinueforpublicthrowwchar_tdefaultfriendregistertruewhiledeletegotoreinterpret_castC++還保留了一些詞用作各種操作符的替代名,它們也不能用作標識符。andbitandcomplnot_eqor_eqxor_eqand_eqbitornotorxor2.1.3標識符標識符是程序員定義的名字,用作變量名、函數(shù)名和類型名,標識符由字母、數(shù)字和下劃線構(gòu)成,并且必須以字母或下劃線開頭。如:
aA1programDataStructureMyPen my_pen_system_logintdoublesort
都是標識符。注意,在C++中,大寫字母與小寫字母是有區(qū)別的。如:MyPen和mypen不是同一標識符。以下是不合法的標識符:
3d(不是以字母開頭) C++(+號是非法字符)2.1.4標點符號書寫程序時,每個語法符號之間必須用分隔符隔開,起分隔作用的有運算符、空格符、制表符、回車符等。2.2數(shù)據(jù)類型
2.2.1數(shù)據(jù)類型的含義數(shù)據(jù)類型是一個值的集合和定義在此集合上的一組操作的總稱。數(shù)據(jù)類型包含三個內(nèi)容:①具有同樣性質(zhì)的一個數(shù)據(jù)集合。②數(shù)據(jù)在計算機內(nèi)部的表示方式。③在該數(shù)據(jù)上的操作。C++的數(shù)據(jù)類型2.2.2C++基本數(shù)據(jù)類型類型名稱占用字節(jié)數(shù)取值范圍bool布爾型1true,false[signed]char有符號字符型1-128~127unsignedchar無符號字符型10~255[signed]short[int]有符號短整型2-32768~32767unsignedshort[int]無符號短整型20~65535[signed]int有符號整型4-231~(231-1)unsigned[int]無符號整型40~(232-1)[signed]long[int]有符號長整型4-231~(231-1)unsignedlong[int]無符號長整型40~(232-1)float單精度型4-1038~1038double雙精度型8-10308~10308longdouble長雙精度型10-104932~104932void無值型0在vc中,longdouble等同double,也就是8字節(jié),在C++builder中為10字節(jié),在gcc中為12字節(jié),longdouble并不常用。C++的數(shù)據(jù)包括常量與變量,常量與變量都具有類型。由以上這些數(shù)據(jù)類型還可以構(gòu)成更復雜的數(shù)據(jù)結(jié)構(gòu)。例如利用指針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、棧等復雜的數(shù)據(jù)結(jié)構(gòu)。C++并沒有統(tǒng)一規(guī)定各類數(shù)據(jù)的精度、數(shù)值范圍和在內(nèi)存中所占的字節(jié)數(shù),各C++編譯系統(tǒng)根據(jù)自己的情況作出安排。2.3常量
2.3.1什么是常量常量的值是不能改變的,一般從其字面形式即可判別是否為常量。常量包括兩大類,即數(shù)值型常量(即常數(shù))和字符型常量。如12,0,-3為整型常量,4.6,-1.23為實型常量,包含在兩個單撇號之間的字符為字符常量,如'a'、'x'。這種從字面形式即可識別的常量稱為“字面常量”或“直接常量”。2.3.2數(shù)值常量數(shù)值常量就是通常所說的常數(shù)。在C++中,數(shù)值常量是區(qū)分類型的,從字面形式即可識別其類型。1.整型常數(shù)整型常數(shù)可用3種表示方式:①十進制整數(shù):12,-34。②八進制整數(shù):0123。③十六進制整數(shù):0X123,0x123。十進制數(shù)有正負之分,但八進制和十六進制數(shù)只能表示無符號整數(shù)。12——int類型。12L,12l——longint類型。一個整型常數(shù)如果其范圍允許,那么計算機默認將其認為是int類型的,在其后面加L或l,則認為是longint型常數(shù)。不過,這在以前的16位機器才有意義?,F(xiàn)在,我們的機器都是32位,longint和int完全一樣,都是占用4個字節(jié),所以我們沒有必要這樣用了。2.浮點數(shù)含有小數(shù)點或10的冪的數(shù)均為浮點數(shù)。浮點數(shù)一般只用10進制表示。比如:123.45浮點數(shù)還可以使用科學計數(shù)法,或曰指數(shù)形式,如:123e4、或123E4都表示123×104,即1230000。E前的數(shù)字一定要寫,指數(shù)一定是整數(shù)。浮點數(shù)類型有:float,double,longdouble。在C++中,默認的浮點數(shù)類型是double。比如:1.234 C++按double類型為這個數(shù)分配內(nèi)存,也就是說為它分配8個字節(jié)。如果要改變這一點,可以通過加后綴字母來實現(xiàn)。加f或F,指定為float類型。加l或L,指定為longdouble類型。以下示例:12.3f//float類型12.3//默認類型(double)12.3L//longdouble類型12.3e400//longdouble類型,因為值已不在double類型的取值范圍內(nèi)2.3.3字符常量
1.普通的字符常量字符常量是用單引號括起來的一個字符,如:'a'、'b'、'c'、''、'A'。注意:①字符常量只能包括一個字符,如'AB'是不合法的。②字符常量區(qū)分大小寫字母,如'A'和'a'是兩個不同的字符常量。③撇號(')是定界符,而不屬于字符常量的一部分。如cout<<'a';輸出的是一個字母“a”,而不是3個字符“'a'”。2.轉(zhuǎn)義字符常量除了以上形式的字符常量外,C++還允許用一種特殊形式的字符常量,就是以“\”開頭的字符序列。例如,'\n'代表一個“換行”符?!癱out<<'\n';”將輸出一個換行,其作用與“cout<<endl;”相同。這種“控制字符”,在屏幕上是不能顯示的,在程序中也無法用一個一般形式的字符表示,只能采用特殊形式來表示。常用的以“\”開頭的特殊字符見書中表2.2。3.字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法將一個字符常量存放到內(nèi)存單元時,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符相應的ASCII代碼放到存儲單元中。如果字符變量c1的值為'a',c2的值為'b',則在變量中存放的是'a'的ASCII碼97,'b'的ASCII碼98,如圖2.4(a)所示,實際上在內(nèi)存中是以二進制形式存放的,如圖2.4(b)所示。圖2.4既然字符數(shù)據(jù)是以ASCII碼存儲的,它的存儲形式就與整數(shù)的存儲形式類似。這樣,在C++中字符型數(shù)據(jù)和整型數(shù)據(jù)之間就可以通用。一個字符數(shù)據(jù)可以賦給一個整型變量,反之,一個整型數(shù)據(jù)也可以賦給一個字符變量。也可以對字符數(shù)據(jù)進行算術運算,此時相當于對它們的ASCII碼進行算術運算。例將字符賦給整型變量。#include<iostream>usingnamespacestd;intmain(){ inti,j;//i和j是整型變量
i='A';//將一個字符常量賦給整型變量i j='B';//將一個字符常量賦給整型變量j cout<<i<<''<<j<<'\n';//輸出整型變量i和j的值
return0;}6566例字符數(shù)據(jù)與整數(shù)進行算術運算。
下面程序的作用是將小寫字母轉(zhuǎn)換為大寫字母。#include<iostream>usingnamespacestd;intmain(){ charc1,c2; c1='a'; c2='b'; c1=c1-32; c2=c2-32; cout<<c1<<''<<c2<<endl; return0;}AB'a'的ASCII碼為97,而'A'的ASCII碼為65,'b'為98,'B'為66。從ASCII代碼表中可以看到每一個小寫字母比它相應的大寫字母的ASCII代碼大32。C++符數(shù)據(jù)與數(shù)值直接進行算術運算,'a'-32得到整數(shù)65,'b'-32得到整數(shù)66。將65和66存放在c1、c2中,由于c1、c2是字符變量,因此用cout輸出c1、c2時,得到字符A和B(A的ASCII碼為65,B的ASCII碼為66)。4.字符串常量字符串的是由一對雙引號括起的來的字符序列。字符串常量總是以'\0'結(jié)束。有兩個字符串:
"Hello" "What"假設二者在內(nèi)存中存儲的位置正好是連續(xù)的,那么內(nèi)存示意就為:Hello\0What\0
因為空字符沒有任何輸出效果,所以正常的字符串中是不會出現(xiàn)空字符的。因此,用它來表示一個字符串的結(jié)束。
注意:"a"和'a'代表不同的含義,"a"是字符串常量,'a'是字符常量。前者占兩個字節(jié),后者占1個字節(jié)。請分析下面的程序片段:charc;//定義一個字符變量c='a';//正確c="a";//錯誤,c只能容納一個字符思考:字符串常量"abc\n"包含幾個字符?它在內(nèi)存中占幾個字節(jié)?2.3.4符號常量(用宏表示常數(shù))宏的語法為:
#define宏名稱宏值如:#definePAI3.14159注意:宏定義不是C++嚴格意義上的語句,所以其行末不用加分號結(jié)束。宏名稱經(jīng)常使用全部大寫的字母。#include<iostream>usingnamespacestd;#definePRICE30//注意這不是語句,末尾不要加分號intmain(){ intnum,total; num=10; total=num*PRICE; cout<<"total="<<total<<endl; return0;}使用符號常量的好處是:(1)含義清楚。(2)在需要改變一個常量時能做到“一改全改”。2.4變量
2.4.1什么是變量在程序運行期間其值可以改變的量稱為變量。變量必須用標識符進行標識,該標識符稱為變量名。程序編譯時,編譯器根據(jù)變量類型為每一個變量分配一段連續(xù)的內(nèi)存單元,用于存儲該變量的取值。注意區(qū)分變量名和變量值這兩個不同的概念,見下圖2.4.2變量命名規(guī)則變量命名規(guī)則同標識符命名規(guī)則。①不能取名為C++的保留字。
intchar;//不行這是不被允許的。char是一個保留字。我們不能再拿來做變量。②不能以數(shù)字開頭
int100;//不行
int100ren;//不行③不能夾有空格
booldoyouloveme;//不行 可以用下劃線代替空格:
booldo_you_love_me;//OK④不能在同一作用范圍內(nèi)有同名變量(僅C++)比如:
intabc; intabcd; intabc;//不行在C里,上面重復定義變量abc是被允許的。⑤不要和C++中已有的全局變量、函數(shù)、類型名取相同的名字。
doublesin;這不合適。因為C庫為我們提供了計算正弦值的函數(shù),名字就叫sin;以上幾點中,凡標為“不能”,意味如果你違反了,你的程序便會在編譯時出錯。而“不要”則僅屬建議內(nèi)容。真要這么做,程序也沒錯。2.4.3定義變量語法:數(shù)據(jù)類型變量名;
intage; charletter; boolgender;其它類型,除了void不能直接定義一個變量以外,格式都是一樣的。
inta,b,c;一起定義多個同類型變量的方法是:在不同變量之間以逗號(,)分隔,最后仍以分號(;)結(jié)束。在一個語句里可建立多個同一類型的變量,不能混合定義不同類型的變量。C++要求對變量作強制定義的目的是:(1)凡未被事先定義的,不能作為變量名,這就能保證程序中變量名使用得正確。(2)每一個變量被指定為一確定類型,在編譯時就能為其分配相應的存儲單元。如指定a和b為int型,一般的編譯系統(tǒng)對其各分配4個字節(jié),并按整數(shù)方式存儲數(shù)據(jù)。(3)指定每一變量屬于一個特定的類型,這就便于在編譯時,據(jù)此檢查該變量所進行的運算是否合法。例如,整型變量a和b,可以進行求余運算:
a%b
%是“求余”,得到a/b的余數(shù)。如果將a和b指定為實型變量,則不允許進行“求余”運算,在編譯時會給出有關的出錯信息。2.4.4為變量賦初值①在定義時初始化變量
inta=0;通過一個等號,我們讓a的值等于0;同時定義多個變量時也一樣:
inta=0,b=1;當然也可以根據(jù)需要,只給部分變量初始化。
inta=0,b;
或:
inta,b=1;對多個變量賦予同一初值,必須分別指定,不能寫成
floata=b=c=4.5;而應寫成
floata=4.5,b=4.5,c=4.5;②在定義以后賦值
inta; a=100;注意:未初始化的變量,它的值將是“不確定的”。例:#include<iostream>usingnamespacestd;intmain(){ inta; doubleb; charc; cout<<a<<endl; cout<<b<<endl; cout<<c<<endl; return0;}25.56231e-308|變量允許的取值范圍等同于其數(shù)據(jù)類型的范圍。#include<iostream>#include<climits>usingnamespacestd;intmain(){inta=1234567890;intb=12345678901;cout<<a<<endl;cout<<INT_MAX<<endl;cout<<b<<endl;}2.4.5變量與內(nèi)存地址不同的變量擁有不同的內(nèi)存地址。 譬如:
chara; charb;上面有兩個字符類型的變量a和b,a擁有自已的內(nèi)存地址,b也擁有自已的內(nèi)存地址,二者絕不相同。而a、b只不過分別是那兩個內(nèi)存地址的“名字”,恰如“張三、李四”。在圖示的例子中,a、b是字符(char)類型。各占用1個字節(jié)。如果是int類型,那么應該占4個字節(jié)。這4個字節(jié)必須是連續(xù)的。讓我們再來看一個例子:
inta; intb; charc;這里,我們聲明了兩個int類型和一個char類型的變量。同時和上面一樣,我們事實上是假設了這三個變量被依次序分配在相鄰的內(nèi)存地址上(真實情況下,這和其它因素,如指定的字節(jié)對齊方式等有關)。從右圖中可以看到整型變量a占用了1000001~100004這4個字節(jié)。①不同的變量,存入在不同的內(nèi)存地址,所以變量之間相互獨立。②變量的數(shù)據(jù)類型決定了變量占用連續(xù)的多少個字節(jié)。③變量的內(nèi)存地址在程序運行時得以確定。變量的內(nèi)存地址不能改變。④對變量的操作,等同于對變量所在地址的內(nèi)存操作。⑤反過來說:對指定內(nèi)存地址的內(nèi)存操作,等同對相應變量的操作。2.4.6常變量在定義變量時,如果加上關鍵字const,則變量的值在程序運行期間不能改變,這種變量稱為常變量(constantvariable)。常變量定義的格式為:
const數(shù)據(jù)類型常變量名=常量值;
相比變量定義的格式,常變量定義必須以const開始,另外,常變量必須在定義的同時完成賦值。
constfloatPAI=3.1415926;const的作用就是指明這個量(PAI)是常變量,而非變量。
常變量必須一開始就指定一個值,然后,在以后的代碼中,我們不允許改變PAI的值,比如:
constdoublePAI=3.14159; doublezc=2*PAI*R; PAI=3.1415926;//錯誤!,PAI不能再修改。
doublemj=PAI*R*R;在C++編程中,“常量”定義常用const,不用#define。思考:#definePAI3.14159constdoublePAI=3.14159;有何異同?2.5表達式
2.5.1表達式概述對常量或變量進行運算或處理的符號稱為運算符,參與運算的對象稱為操作數(shù)。表達式是操作符、操作數(shù)和標點符號組成的序列,用于表達一個計算過程。比如寫一個計算圓面積,我們可以如下表達:
area=PAI*r*r;其中,r是某一定義的變量,表示半徑,而PAI是事先定義的一個值為3.14的常變量?!癙AI*r*r”是一個表達式;“area=PAI*r*r”也是一個表達式。簡單的如:3+2,也是一個表達式。表達式組成了C++語句,而語句組成C++的程序。表達式根據(jù)某些約定、求值次序、結(jié)合性和優(yōu)先級規(guī)則來進行計算。約定:即類型轉(zhuǎn)換的約定。求值次序:指表達式中各個操作數(shù)的求值次序,視編譯器不同而不同。結(jié)合性:指表達式中出現(xiàn)同等優(yōu)先級操作符時,該先做哪個操作的規(guī)定。優(yōu)先級:指不同優(yōu)先級的操作符,總是先做優(yōu)先級高的操作。2.5.2左值和右值表達式可產(chǎn)生左值、右值或不產(chǎn)生值。左值:能出現(xiàn)在賦值表達式左邊的表達式。左值具有兩個條件:左值表達式具有存放數(shù)據(jù)的空間,并且該空間是允許修改的。
變量是左值。
賦值表達式是左值。
返回引用的函數(shù)是左值。右值:能出現(xiàn)在賦值表達式右邊的表達式。右值表達式要求具有值。例:inta=3;//a是變量,a是左值constintb=5;//b是常量,b不是左值a=b;//正確b=a;//錯誤(a=4)=25;//正確,a=4是左值表達式,可以被賦以值252.5.3優(yōu)先級和結(jié)合性含有兩個或更多操作符的表達式稱為復合表達式。在復合表達式中,操作數(shù)和操作符的結(jié)合方式?jīng)Q定了整個表達式的值——表達式的結(jié)果會因為操作符和操作數(shù)的分組結(jié)合方式的不同而不同。操作的分組結(jié)合方式取決于操作符的優(yōu)先級和結(jié)合性。也就是說,優(yōu)先級和結(jié)合性決定了表達式的哪個部分用作哪個操作符的操作數(shù)。操作數(shù)的分組結(jié)合方式由如下兩個原則決定:①如果相鄰的兩個操作符優(yōu)先級不同,則優(yōu)先級高的先與操作數(shù)結(jié)合。②如果相鄰的兩個操作符優(yōu)先級相同,則結(jié)合順序由第一個操作符的結(jié)合性決定,如果結(jié)合性為“從左到右”,則操作數(shù)先與第一個操作符結(jié)合,否則其結(jié)合性為“從右到左”,需先與第二個操作符結(jié)合。在所有的操作符中,除了一元操作符(單目操作符)、賦值操作符和復合操作符的結(jié)合性為“從右到左”外,其余操作符的結(jié)合性均為“從左到右”。
a+b+c;//左結(jié)合(a+b)+c;a=b=c;//右結(jié)合a=(b=c);*求值順序C++標準中規(guī)定了操作數(shù)計算順序的操作符有&&、||、(?:)和逗號操作符。除此之外,其他操作符并未指定其操作數(shù)的求值順序。以什么次序求解操作數(shù)通常沒有多大關系。只有當操作符的兩個操作數(shù)涉及到同一個對象,并改變其值時,操作數(shù)的計算次序才會影響結(jié)果。3.5.4語句與塊C++中的所有操作運算都通過表達式來實現(xiàn)。C++語句和表達式并沒有嚴格的區(qū)分。一個表達式,加上一個分號后,可以直接形成語句:
3+2;當一些表達式組合起來,完成某一相對完整的功能后,再加一個分號表示結(jié)束,這就組成一條語句。如:
a=3+2;這是一行賦值語句,它改變了a的值。有時候,連續(xù)的多個語句屬于同一控制范圍,這時,我們用一對花括號將這些語句括起:
{inta=100;intb=a*20;....}括在一對花括號{}里的語句序列稱為塊或復合語句。從語法上來說,塊可以被認為是單個語句。2.6C++的運算符C++的運算符十分豐富,使得C++的運算十分靈活方便。例如把賦值號(=)也作為運算符處理,這樣,a=b=c=4就是合法的表達式。C++提供了以下運算符:⑴算術運算符
+(加)-(減)*(乘)/(除)%(整除求余)++(自加)--(自減)⑵關系運算符>(大于)<(小于)==(等于)>=(大于或等于)<=(小于或等于)!=(不等于)⑶邏輯運算符&&(邏輯與)||(邏輯或)!(邏輯非)⑷位運算符<<(按位左移)>>(按位右移)&(按位與)|(按位或)^(按位異或)~(按位取反)⑸賦值運算符(=及其擴展賦值運算符)⑹條件運算符(?:)⑺逗號運算符(,)⑻指針運算符(*)⑼引用運算符和地址運算符(&)⑽求字節(jié)數(shù)運算符(sizeof)⑾強制類型轉(zhuǎn)換運算符((類型)或類型())⑿成員運算符(.)⒀指向成員的運算符(->)⒁下標運算符([])⒂其他(如函數(shù)調(diào)用運算符())在本章中主要介紹算術運算符與算術表達式,賦值運算符與賦值表達式,逗號運算符與逗號表達式,其他運算符將在以后各章中陸續(xù)介紹。2.7算術運算符與算術表達式
2.7.1基本的算術運算符在C++中,加減乘除分別使用字符'+'、'-'、'*'、'/'作為運算符號。加、減、乘的操作沒有什么需要特別說明之處,和生活中的相關運算完全一樣。注意:“/”對于整型數(shù)為除法取整操作,對于浮點數(shù)則為通常意義的除法。如果除數(shù)或被除數(shù)中有一個為負值,則舍入的方向是不固定的。多數(shù)編譯系統(tǒng)采取“向零取整”的方法。inta=5/2;//結(jié)果為2doubleb=5/2;//結(jié)果為2doublec=5.0/2;//結(jié)果為2.5intd=5.0/2;//會有警告inte=-5/3;//結(jié)果為-1“%”操作也是C++常用的操作符,進行求余數(shù)(求模)運算。
inta=5%2;
結(jié)果是,a等1,即:5除以2,余數(shù)為1。注意:①%只能對整型數(shù)進行操作?、谌绻麅蓚€整數(shù)中有負數(shù),則結(jié)果的符號與被除數(shù)相同。例:設某四位數(shù)的千位數(shù)字平方與十位數(shù)字的平方之和等于百位數(shù)字的立方與個位數(shù)字的立方之和,例如,對于四位數(shù):3201,32+02=23+13,試問所有這樣的四位數(shù)之和是多少?
#include<iostream>#include<cmath>usingnamespacestd;intmain(){inti,s=0;for(i=1000;i<=9999;i++){inta,b,c,d;a=i/1000;b=(i/100)%10;c=(i/10)%10;d=i%10;if(a*a+c*c==pow(b,3)+pow(d,3))s+=i;}cout<<s<<endl;return0;}例:#include<iostream>usingnamespacestd;intmain(){inti,a[]={1,2,3};for(i=0;i<21;i++)cout<<a[i%3];cout<<endl;return0;}思考:17個人圍成圈,編號為1~17,從第1號開始報數(shù),報到3的倍數(shù)的人離開,一直數(shù)下去,直到最后只剩下1人,求此人的編號。2.7.2自增和自減運算符當運算是自加或自減1的時候,C++提供了更為優(yōu)化的運算操作符:++、--。 a=a+1;→a++;或++a; a=a-1;→a--;或--a;++a和a++的區(qū)別:在C++語言里,++a和--a稱為前置運算,而a++和a--稱為后置運算。inta=2;++a: a的值增1后返回a。a++: 先保存a的值,然后a的值增1,再返回保存的值。如果僅僅是進行前置運算或后置運算,那么結(jié)果是相同的。例如:設a為10,則無論是++a或a++,執(zhí)行結(jié)果都是讓a遞增1,成為11。但在有其它運算的復雜表達式中,前置++和后置++對運算結(jié)果的影響不一樣。例1:inta=10;intb=++a;//前置++運算結(jié)果:a的值為11,b的值也為11。計算過程解析:先計算++a,結(jié)果a值為11;然后再計算b=a;結(jié)果a值也為11。例2:inta=10intb=a++;
//后置++運算結(jié)果:a的值為11,但b的值為10。計算過程解析:先計算b=a,因此,b的值是未加1之前的a,所以為10;然后再計算a++,a的值為11。注意:①++,--運算符要求操作數(shù)只能是左值。②前增操作返回的是左值,后增操作返回的是右值。
constinta=4;intb=3,c=1;a++;//×3++;//×c=++b;c=b++;b++-=2;//× ++b+=5;3.7.3算術類型轉(zhuǎn)換C++遇到兩種不同數(shù)據(jù)類型的數(shù)值進行運算時,會將某個數(shù)做適當?shù)念愋娃D(zhuǎn)換,然后再進行轉(zhuǎn)換。轉(zhuǎn)換總是朝表達能力強的方向進行,并且轉(zhuǎn)換總是逐個運算符進行的。doublea=5.0/2;計算機在計算5.0/2時,發(fā)現(xiàn)5.0是實型(帶小數(shù)點),而2是整型,二者不一,所以將2先自動轉(zhuǎn)換成double數(shù),然后現(xiàn)和5.0進行除運算。doublea=5/2;//?這個轉(zhuǎn)換過程,在程序運行時自動進行,稱為隱式轉(zhuǎn)換。隱式(自動)轉(zhuǎn)換盡量使我們的程序更加合理,但有時它并不能完全符合我們的要求。比如:
intb=5,c=2; doublea=b/c;由于除號兩邊的操作數(shù):b、c都是有明確類型的變量。這時,既不會有隱式轉(zhuǎn)換進行,我們也不能通過加'.0'來改變其中某個數(shù)的數(shù)據(jù)類型:doublea=b.0/c.0;//這種寫法是錯誤的,不可能實現(xiàn)這種情況下,我們需要顯式(強制)類型轉(zhuǎn)換。例如:
(double)a(將a轉(zhuǎn)換成double類型)
(int)(x+y)(將x+y的值轉(zhuǎn)換成整型)
(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)
(double)(5)/2強制類型轉(zhuǎn)換的一般形式為
(類型名)(表達式)注意:如果要進行強制類型轉(zhuǎn)換的對象是一個變量,該變量可以不用括號括起來。如果要進行強制類型轉(zhuǎn)換的對象是一個包含多項的表達式,則表達式應該用括號括起來。需要說明的是在強制類型轉(zhuǎn)換時,得到一個所需類型的中間變量,但原來變量的類型未發(fā)生變化。以上強制類型轉(zhuǎn)換的形式是原來C語言使用的形式,C++把它保留了下來,以利于兼容。C++還增加了以下形式:⑴類型名(表達式)
如int(x)或int(x+y)
類型名不加括號,而變量或表達式用括號括起來。⑵static_cast<類型名>(變量或數(shù)值)
例如:
intb=5,c=2; doublea=static_cast<double>(b)
/c;2.8賦值運算符與賦值表達式
2.8.1賦值運算符賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運算)。把常量3賦給
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 經(jīng)營酒吧合同
- 股份制改革流程文書模板與指導
- 汽車美容店合作協(xié)議書年
- 委托培訓協(xié)議書
- 質(zhì)量管理體系培訓指導書
- 2025年青海貨運從業(yè)資證孝試模似題庫
- 小學三年級數(shù)學加減乘除混合口算
- 2025年黔東南道路貨運駕駛員從業(yè)資格證考試題庫
- 2025年上海貨車叢業(yè)資格證考試題
- 2025年汕頭貨運從業(yè)資格證怎么考試
- DL-T-692-2018電力行業(yè)緊急救護技術規(guī)范
- 2024年杭州錢塘新區(qū)建設投資集團有限公司招聘筆試沖刺題(帶答案解析)
- 2023年四川省綿陽市中考數(shù)學試卷
- 《電力系統(tǒng)自動化運維綜合實》課件-SDH設備尾纖連接
- 安裝工程危險源
- 愛國主義教育法 講座
- 小區(qū)監(jiān)控改造方案
- 建設施工安全風險辨識和管控清單
- GA/T 2016-2023公安視頻圖像信息系統(tǒng)運維管理規(guī)范
- 第1課+古代亞非(教學設計)【中職專用】《世界歷史》(高教版2023基礎模塊)
- 老年人誤吸的預防
評論
0/150
提交評論