C語言C第3章數(shù)據(jù)類型.ppt
《C語言C第3章數(shù)據(jù)類型.ppt》由會員分享,可在線閱讀,更多相關(guān)《C語言C第3章數(shù)據(jù)類型.ppt(91頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
,第三章,數(shù)據(jù)類型、運(yùn)算符與表達(dá)式,,本章要點(diǎn),數(shù)據(jù)的描述規(guī)則數(shù)據(jù)的操作規(guī)則,,主要內(nèi)容,3.1C的數(shù)據(jù)類型3.2常量與變量3.3整型數(shù)據(jù)3.4浮點(diǎn)型數(shù)據(jù)運(yùn)行3.5字符型數(shù)據(jù),,主要內(nèi)容,3.6變量賦初值3.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.9賦值運(yùn)算符和賦值表達(dá)式3.10逗號運(yùn)算符和逗號表達(dá)式,3.1C語言的數(shù)據(jù)類型,C語言提供了以下一些數(shù)據(jù)類型。,數(shù)據(jù)類型,構(gòu)造類型,指針類型,空類型(無值類型)void,,3.2常量與變量,3.2.1常量和符號常量在程序運(yùn)行過程中,其值不能被改變的量稱為常量常量區(qū)分為不同的類型:直接常量:符號常量:用標(biāo)識符代表常量。#define符號常量常量,,整型:100,125,-100,0實(shí)型:3.14,0.125,-3.789字符型:‘a(chǎn)’,‘b’,‘2’字符串:“a”,“ab”,”1232”,例3.1符號常量的使用#definePRICE30#includevoidmain(){intnum,total;num=10;total=num*PRICE;printf(″total=%d\n″,total);},符號常量:用一個(gè)標(biāo)識符代表一個(gè)常量。符號常量的值在其作用域內(nèi)不能改變,也不能再被賦值。,運(yùn)行結(jié)果:total=300,說明:程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算。優(yōu)點(diǎn):含義清楚,見名知意;便于修改,一改全改。,說明:如再用賦值語句給PRICE賦值是錯(cuò)的PRICE=40;/*錯(cuò)誤,不能給符號常量賦值。*/,3.2常量與變量,3.2.2變量其值可以改變的量。代表內(nèi)存中具有特定屬性的一個(gè)存儲單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運(yùn)行期間,這些值是可以改變的。,,變量名實(shí)際上是一個(gè)以一個(gè)名字對應(yīng)代表一個(gè)地址,在對程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。,3.2常量與變量,標(biāo)識符:用來標(biāo)識變量、常量、函數(shù)等的字符序列變量命名的規(guī)定:C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。例:sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_lingM.D.John,¥123,3D64,a>b,char,?,?,3.2常量與變量,注意:編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個(gè)不同的字符。建議變量名的長度最好不要超過8個(gè)字符。每個(gè)變量屬于一確定類型,以避免運(yùn)算時(shí)類型出錯(cuò);比如求余運(yùn)算。在選擇變量名和其它標(biāo)識符時(shí),應(yīng)注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標(biāo)識符。不宜混淆如l與I,o與0。要求對所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”。例如:intstudent;intscore;stydent=30;socre=85;編譯系統(tǒng)報(bào)錯(cuò),3.3整型數(shù)據(jù),3.3.1整型常量的表示方法整型常量即整常數(shù)。在C語言中,整常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。如:123,-456,0。(2)八進(jìn)制整數(shù)。以0開頭的數(shù)是八進(jìn)制數(shù)。如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83;-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。(3)十六進(jìn)制整數(shù)。以0 x開頭的數(shù)是16進(jìn)制數(shù)。如:0 x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù)291;-0 x12等于十進(jìn)制數(shù)-18。,,3.3整型數(shù)據(jù),3.3.2整型變量(1)整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。如:inti;/*定義為整型變量*/i=10;/*給i賦以整數(shù)10*/,注意:十進(jìn)制數(shù)10的二進(jìn)制形式為1010,TurboC2.0和TurboC++3.0為一個(gè)整型變量在內(nèi)存中分配2個(gè)字節(jié)的存儲單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC++6.0則分配4個(gè)字節(jié))。數(shù)值是以補(bǔ)碼(complement)表示的。,3.3整型數(shù)據(jù),(2)整型變量的分類,共六種,,有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型,(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int),注意:括號表示其中的內(nèi)容是可選的.,基本數(shù)據(jù)類型,整型,字符型,實(shí)型,有,無,說明:數(shù)據(jù)類型所占字節(jié)數(shù)隨機(jī)器硬件不同而不同,上表以IBMPC機(jī)為例。,,3.3整型數(shù)據(jù),例如:整數(shù)13在內(nèi)存中實(shí)際存放的情況:,3.3整型數(shù)據(jù),(3)整型變量的定義:C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。例如:inta,b;(指定變量a、b為整型)unsignedshortc,d;(指定變量c、d為無符號短整型)longe,f;(指定變量e、f為長整型),例3.2整型變量的定義與使用#includevoidmain(){inta,b,c,d;/*指定a、b、c、d為整型變量*/unsignedu;/*指定u為無符號整型變量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);},說明:可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算,運(yùn)行結(jié)果:a+u=22,b+u=-14,例3.3整型數(shù)據(jù)的溢出#includevoidmain(){inta,b;a=32767;b=a+1;printf(“%d,%d\n”,a,b);},說明:數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納-32768~32767范圍內(nèi)的數(shù),無法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。,運(yùn)行結(jié)果:32767,-32768,3.3整型數(shù)據(jù),3.3.3整型常量的類型(1)一個(gè)整數(shù),如果其值在-32768~+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和longint型變量。(2)一個(gè)整數(shù),如果其值超過了上述范圍,而在-2147483638~+2147483647范圍內(nèi),則認(rèn)為它是為長整型??梢詫⑺x值給一個(gè)longint型變量。(3)如果所用的C版本(如TurboC)分配給shortint與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與int型相同。因此一個(gè)int型的常量同時(shí)也是一個(gè)shortint型常量,可以賦給int型或shortint型變量。,3.3整型數(shù)據(jù),(4)一個(gè)整常量后面加一個(gè)字母u或U,認(rèn)為是unsignedint型,如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼53191,然后按無符號數(shù)存儲。(5)在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是longint型常量。例如:123l、432L用于函數(shù)調(diào)用中。如果函數(shù)的形參為longint型,則要求實(shí)參也為longint型。,3.4浮點(diǎn)型數(shù)據(jù),3.4.1浮點(diǎn)型常量的表示方法,兩種表示形式,,小數(shù):指數(shù):,0.1233e-3,注意:字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù),1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e,?,?,3.4浮點(diǎn)型數(shù)據(jù),規(guī)范化的指數(shù)形式:在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字。例如:123.456可以表示為:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e2稱為“規(guī)范化的指數(shù)形式”。,3.4浮點(diǎn)型數(shù)據(jù),3.4.2浮點(diǎn)型變量(1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4個(gè)字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。,3.4浮點(diǎn)型數(shù)據(jù),(2)浮點(diǎn)型變量的分類浮點(diǎn)型變量分為單精度(float型)、雙精度(double型)和長雙精度型(longdouble)三類形式。,例3.4浮點(diǎn)型數(shù)據(jù)的舍入誤差#includevoidmain(){floata,b;a=123456.789e5;b=a+20;printf(“%f\n”,b);},說明:一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)。,運(yùn)行結(jié)果:123456.789e5,3.4浮點(diǎn)型數(shù)據(jù),3.4.3浮點(diǎn)型常量的類型C編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理。例如:f=2.45678*4523.65系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個(gè)雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母f或F(如1.65f,654.87F),這樣編譯系統(tǒng)就會把它們按單精度(32位)處理。實(shí)型常量在賦給變量時(shí),根據(jù)變量的類型截取相應(yīng)的有效位數(shù)字,故實(shí)際結(jié)果往往出人意料。floata;a=111111.123小數(shù)點(diǎn)最后兩位無效有時(shí)當(dāng)計(jì)算1.0/3時(shí),輸出卻是0.3333333261,3.5字符型數(shù)據(jù),3.5.1字符常量(1)用單引號包含的一個(gè)字符是字符型常量;(2)只能包含一個(gè)字符;,例,‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、“a”,,,?,(3)有些以“\”開頭的特殊字符稱為轉(zhuǎn)義字符。,3.5字符型數(shù)據(jù),,~|∧&)(5)賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)(6)條件運(yùn)算符(?:)(7)逗號運(yùn)算符(,),3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(8)指針運(yùn)算符(*和&)(9)求字節(jié)數(shù)運(yùn)算符(sizeof)(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符((類型))(11)分量運(yùn)算符(.->)(12)下標(biāo)運(yùn)算符([])(13)其他(如函數(shù)調(diào)用運(yùn)算符()),3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,3.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式(1)基本的算術(shù)運(yùn)算符:+(加法運(yùn)算符,或正值運(yùn)算符。如:3+5、+3)-(減法運(yùn)算符,或負(fù)值運(yùn)算符。如:5-2、-3)*(乘法運(yùn)算符。如:3*5)/(除法運(yùn)算符。如:5/3)%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。,3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(2)算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性:用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如:a*b/c-1.5+’a’是一個(gè)合法的表達(dá)式,書寫時(shí)注意以下幾點(diǎn):①C表達(dá)式中的乘號不能省略。例如:數(shù)學(xué)式b2-4ac相應(yīng)的C表達(dá)式應(yīng)寫成:b*b-4*a*c②C表達(dá)式中只能使用系統(tǒng)允許的標(biāo)識符。例如:數(shù)學(xué)式πr2相應(yīng)的C表達(dá)式應(yīng)寫成:3.14159*r*r,③C表達(dá)式中的內(nèi)容必須書寫在同一行,不允許有分子分母形式,必要時(shí)要利用圓括號保證運(yùn)算的順序。例如:相應(yīng)的C表達(dá)式應(yīng)寫成:(a+b)/(c+d)④C表達(dá)式不允許使用方括號和花括號,只能使用圓括號來幫助限定運(yùn)算順序??梢允褂枚鄬訄A括號,但左右括號必須配對,運(yùn)算時(shí)從內(nèi)層圓括號開始,由內(nèi)向外依次計(jì)算表達(dá)式的值。,C語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。C規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性)一個(gè)對象兩側(cè)的運(yùn)算符級別相同,則按結(jié)合性運(yùn)算。算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇?,即先左后右,又稱為“左結(jié)合性”。運(yùn)算對象先與左面的運(yùn)算符結(jié)合。如:a-b+c,3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型。一般形式:(類型名)(表達(dá)式)例如:(double)a將a轉(zhuǎn)換成double類型(int)(x+y)將x+y的值轉(zhuǎn)換成整型(float)(5%3)將5%3的值轉(zhuǎn)換成float型當(dāng)自動類型轉(zhuǎn)換不能達(dá)到目的時(shí),可以強(qiáng)制類型轉(zhuǎn)換。得到一個(gè)所需類型的中間變量,而原來變量的類型未發(fā)生變化。,例3.8強(qiáng)制類型轉(zhuǎn)換。#includevoidmain(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d\n",x,i);},說明:有兩種類型轉(zhuǎn)換,一種是在運(yùn)算時(shí)不必用戶指定,系統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換,如3+6.5。第二種是強(qiáng)制類型轉(zhuǎn)換。當(dāng)自動類型轉(zhuǎn)換不能實(shí)現(xiàn)目的時(shí),可以用強(qiáng)制類型轉(zhuǎn)換。,運(yùn)行結(jié)果:x=3.600000,i=3,3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(4)自增、自減運(yùn)算符作用是使變量的值增1或減1如:++i,--i(在使用i之前,先使i的值加(減)1)i++,i--(在使用i之后,在使i的值加(減)1),3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,i++與++i的區(qū)別:++i是先執(zhí)行i=i+1后,再使用i的值;i++是先使用i的值后,再執(zhí)行i=i+1。例如:①j=++i;i的值先變成4,再賦給j,j的值為4②j=i++;先將i的值3賦給j,j的值為3,然后i變?yōu)椋?例a=3;printf(“%d”,++a);/*結(jié)束時(shí)a=4*/printf(“%d”,a++);printf(“%d”,a);結(jié)果:445,例j=3;k=++j;等價(jià)于:j++;k=j;j=3;k=j++;等價(jià)于:k=j;j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;,//k=4,j=4,//k=3,j=4,//4,//3,//c=20,a=4,//c=15,a=4,3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式,注意:(1)自增運(yùn)算符(++),自減運(yùn)算符(--),只能用于整形變量和指針型變量,而不能用于常量或表達(dá)式,如5++,(a+b)++;(2)++和--的結(jié)合方向是“自右至左”。(3)優(yōu)先級:-++-------->*/%----->+-(2)(3)(4),例-i++?-(i++)i=3;printf(“%d”,-i++);//-3,使用自增、自減運(yùn)算符的注意事項(xiàng),自增、自減運(yùn)算符使得C的表達(dá)式靈活、簡潔,但有時(shí)候會使初學(xué)者迷惑,若使用不當(dāng),會產(chǎn)生意外的后果。這就需要在使用時(shí)尤其注意。,①當(dāng)一個(gè)表達(dá)式中,含有若干個(gè)子表達(dá)式時(shí),ANSIC沒有規(guī)定運(yùn)算符和運(yùn)算對象的計(jì)算次序,因此不同編譯系統(tǒng)處理的順序可能不同。,例如,x=a*b+c%d無所謂;例如,a=3;y=a*++a;不同的編譯系統(tǒng)有兩種處理方式,結(jié)果不同.,A)按從左到右的順序處理為:先取a的值3,再計(jì)算++a,a的值自增為4,子表達(dá)式++a的值也為4,所以相乘的結(jié)果為12;B)按從右到左的順序處理為:先計(jì)算++a,a的值自增為4,子表達(dá)式++a的值也為4,再取a的值為4,所以相乘的結(jié)果為16。,②對于形如a+++b的表達(dá)式,C語言的編譯系統(tǒng)在處理時(shí)盡可能多的自左至右將若干個(gè)字符結(jié)合成一個(gè)運(yùn)算符。因此,a+++b被理解為(a++)+b,而不是a+(++b)。為避免產(chǎn)生誤解,建議將此表達(dá)式寫成(a++)+b的形式。例如:x=i+++i+++i++;應(yīng)被理解為x=(i++)+(i++)+(i++);,③在一個(gè)表達(dá)式中,出現(xiàn)對同一個(gè)變量的多次自增、自減運(yùn)算時(shí),有的編譯系統(tǒng)按從左到右的次序處理,而有些系統(tǒng)一次性的處理這些運(yùn)算是從右到左(如TURBOC2.0系統(tǒng))。請看下列程序的輸出結(jié)果。,#includevoidmain(){inti=6,a,;a=(i++)+(i++)+(i++);printf("\ni=%d",i);printf("\na=%d,a);},若按從左到右的次序處理,預(yù)期的運(yùn)行結(jié)果為:i=9a=21,TC2.0程序的運(yùn)行結(jié)果如下:i=9a=18,④在調(diào)用函數(shù)時(shí),對于實(shí)參的求值順序,ANSIC也沒有規(guī)定。有的系統(tǒng)按從左到右的順序求值,有的相同按從右到左的順序求值。,voidmain(){inti=5;printf("\n%d,%d",i,++i);},若按從左到右的次序處理,預(yù)期的運(yùn)行結(jié)果為:5,6,TC2.0程序的運(yùn)行結(jié)果如下:6,6,⑤編寫程序時(shí),應(yīng)注意把可讀性放在第一位,避免編寫晦澀難懂、容易引起誤解的程序。尤其在使用自增、自減運(yùn)算符時(shí),盡量不要使用易于誤解的表達(dá)方式。為了清晰的表達(dá)編程者的意圖,可以將一個(gè)復(fù)雜的語句分解成多個(gè)簡單的語句,例如:A)y=a*++a;可改寫為b=++a;y=a*b;,B)printf("\n%d,%d",i,++i);可改寫為k=i;printf("\n%d,%d",k,++i);,a=(i++)+(i++)+(i++);可改寫為:x=i++;y=i++;z=i++;a=x+y+z;,不要寫出別人看不懂的也不知道系統(tǒng)會怎樣執(zhí)行程序,3.9賦值運(yùn)算符和賦值表達(dá)式,(1)賦值運(yùn)算符賦值符號“=”就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量3賦給變量a。也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量。,3.9賦值運(yùn)算符和賦值表達(dá)式,(2)類型轉(zhuǎn)換如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換原則:使賦值號右邊表達(dá)式的值自動轉(zhuǎn)換為其左邊變量的類型。①將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),舍棄浮點(diǎn)數(shù)的小數(shù)部分。如:i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3,以整數(shù)形式存儲在整型變量中。,3.9賦值運(yùn)算符和賦值表達(dá)式,②將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲到變量中。如:將23賦給float變量f,即執(zhí)行f=23,先將23轉(zhuǎn)換成23.00000,再存儲在f中。將23賦給double型變量d,即執(zhí)行d=23,系統(tǒng)將23補(bǔ)足有效位數(shù)字為23.00000000000000,然后以雙精度浮點(diǎn)數(shù)形式存儲到變量d中。,3.9賦值運(yùn)算符和賦值表達(dá)式,③將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲單元(4個(gè)字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。如:floatf;doubled=123.456789e100;f=d;/*出現(xiàn)溢出的錯(cuò)誤。*/如果將一個(gè)float型數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個(gè)字節(jié)存儲。,3.9賦值運(yùn)算符和賦值表達(dá)式,④字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占1個(gè)字節(jié),而整型變量為2個(gè)字節(jié),因此將字符數(shù)據(jù)(8個(gè)二進(jìn)位)放到整型變量存儲單元的低8位中。有兩種情況:,第一種情況:低位對應(yīng)、高位補(bǔ)零若所用系統(tǒng)將字符處理為無符號字符類型,或程序已將字符變量定義為unsignedchar型,則將字符的8位放到整型變量低8位,高8位補(bǔ)零。例如:將字符‘\376’賦給int型變量i,第二種情況:符號擴(kuò)展若所用系統(tǒng)(如TurboC++)將字符處理為帶符號(signedchar)時(shí),若字符最高位為0,則整型變量高8位補(bǔ)0;若字符最高位為1,則高8位全補(bǔ)1。這稱為“符號擴(kuò)展”,這樣做的目的是使數(shù)值保持不變,如變量c(字符‘\376’)以整數(shù)形式輸出為-2,i的值也是-2。,3.9賦值運(yùn)算符和賦值表達(dá)式,⑤將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char型變量時(shí),只將其低8位原封不動地送到char型變量(即截?cái)啵?。例如:inti=289;charc=′a′;c=i;,c的值為33,如果用“%c”輸出c,將得到字符“!”!的ASCII碼為33。,賦值情況:,3.9賦值運(yùn)算符和賦值表達(dá)式,將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時(shí),要進(jìn)行符號擴(kuò)展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號位為0),則long型變量的高16位補(bǔ)0;如果int型變量為負(fù)值(符號位為1),則long型變量的高16位補(bǔ)1,以保持?jǐn)?shù)值不改變。反之,若將一個(gè)long型數(shù)據(jù)賦給一個(gè)int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截?cái)啵?3.9賦值運(yùn)算符和賦值表達(dá)式,例如:inta;longb=8;a=b賦值情況如下:,如果b=65536(八進(jìn)制數(shù)0200000),則賦值后a值為0。,3.9賦值運(yùn)算符和賦值表達(dá)式,⑦將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號擴(kuò)展問題,只需將高位補(bǔ)0即可。將一個(gè)unsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯(cuò)誤。,3.9賦值運(yùn)算符和賦值表達(dá)式,例如:unsignedinta=65535;intb;b=a;,將a整個(gè)送到b中,由于b是int,第1位是符號位,因此b成了負(fù)數(shù)。根據(jù)補(bǔ)碼知識可知,b的值為-1,可以用printf(″%d″,b);來驗(yàn)證。,⑧將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(符號位也作為數(shù)值一起傳送)。,例3.9有符號數(shù)據(jù)傳送給無符號變量。#includevoidmain(){unsigneda;intb=-1;a=b;printf(”%u\n”,a);},說明:“%u”是輸出無符號數(shù)時(shí)所用的格式符。如果b為正值,且在0~32767之間,則賦值后數(shù)值不變。,運(yùn)行結(jié)果:65535,3.9賦值運(yùn)算符和賦值表達(dá)式,(3)復(fù)合的賦值運(yùn)算符在賦值符“=”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。種類:+=-=*=/=%=《=》=a+=a-=a*a,例:inta=2;a%=4-1;a+=a*=a-=a*=3;,//a=-264等價(jià)于a=a+(a=a-(a*a)),//a=0等價(jià)于a=a+(a=a*(a=a-(a=a*3))),3.9賦值運(yùn)算符和賦值表達(dá)式,(4)賦值表達(dá)式由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。一般形式為:例如:“a=5”是一個(gè)賦值表達(dá)式,例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),//表達(dá)式值為5,a,b,c值為5,//b=5;a=5,//表達(dá)式值11,c=6,a=11,//表達(dá)式值10,a=10,b=4,c=6,//表達(dá)式值5,a=5,b=10,c=2,3.9賦值運(yùn)算符和賦值表達(dá)式,對賦值表達(dá)式求解的過程是:①求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值;②賦給賦值運(yùn)算符左側(cè)的變量。例如:賦值表達(dá)式“a=3*5”的值為15,執(zhí)行表達(dá)式后,變量a的值也是15。,注意:一個(gè)表達(dá)式應(yīng)該有一個(gè)具體值。,3.9賦值運(yùn)算符和賦值表達(dá)式,左值(lvalue):賦值運(yùn)算符左側(cè)的標(biāo)識符變量可以作為左值;而表達(dá)式就不能作為左值(如a+b);常變量也不能作為左值,,右值(lvalue):出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值都可以作為右值。,3.9賦值運(yùn)算符和賦值表達(dá)式,賦值表達(dá)式中的“表達(dá)式”,又可以是一個(gè)賦值表達(dá)式。例如:a=(b=5),分析:括弧內(nèi)的“b=5”是一個(gè)賦值表達(dá)式,它的值等于5。執(zhí)行表達(dá)式“a=(b=5)”相當(dāng)于執(zhí)行“b=5”和“a=b”兩個(gè)賦值表達(dá)式。賦值運(yùn)算符按照“自右而左”的結(jié)合順序,因此,“(b=5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價(jià)。,3.9賦值運(yùn)算符和賦值表達(dá)式,請分析下面的賦值表達(dá)式∶(a=3*5)=4*3,分析:先執(zhí)行括弧內(nèi)的運(yùn)算,將15賦給a,然后執(zhí)行4*3的運(yùn)算,得12,再把12賦給a。最后a的值為12,整個(gè)表達(dá)式的值為12??梢钥吹健?a=3*5)出現(xiàn)在賦值運(yùn)算符的左側(cè),因此賦值表達(dá)式(a=3*5)是左值,注意:在對賦值表達(dá)式(a=3*5)求解后,變量a得到值15。執(zhí)行(a=3*5)=4*3時(shí),實(shí)際上是將4*3的積12賦給變量a,而不是賦給3*5。,不能寫成:a=3*5=4*3,3.9賦值運(yùn)算符和賦值表達(dá)式,賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。如:a+=a-=a*a,分析:此賦值表達(dá)式的求解步驟如下∶①先進(jìn)行“a-=a*a”的運(yùn)算,它相當(dāng)于a=a-a*a,a的值為12-144=-132②再進(jìn)行“a+=-132”的運(yùn)算,相當(dāng)于a=a+(-132),a的值為-132-132=-264,3.9賦值運(yùn)算符和賦值表達(dá)式,將賦值表達(dá)式作為表達(dá)式的一種,使賦值操作不僅可以出現(xiàn)在賦值語句中,而且可以以表達(dá)式形式出現(xiàn)在其他語句(如輸出語句、循環(huán)語句等)中。如:printf("%d",a=b);,分析:如果b的值為3,則輸出a的值(也是表達(dá)式a=b的值)為3。在一個(gè)語句中完成了賦值和輸出雙重功能。,3.10逗號運(yùn)算符和逗號表達(dá)式,逗號運(yùn)算符:將兩個(gè)表達(dá)式連接起來,又稱為“順序求值運(yùn)算符”如:3+5,6+8,一般形式:表達(dá)式1,表達(dá)式2,……表達(dá)式n,求解過程:先求解表達(dá)式1,再求解表達(dá)式2……整個(gè)逗號表達(dá)式的值是表達(dá)式n的值。用途:常用于for循環(huán)語句中,逗號表達(dá)式的值為14,3.10逗號運(yùn)算符和逗號表達(dá)式,例:逗號表達(dá)式a=3*5,a*4,分析:賦值運(yùn)算符的優(yōu)先級別高于逗號運(yùn)算符,因此應(yīng)先求解a=3*5。,a的值為15,然后求解a*4,得60。整個(gè)逗號表達(dá)式的值為60。,一個(gè)逗號表達(dá)式又可以與另一個(gè)表達(dá)式組成一個(gè)新的逗號表達(dá)式.如:(a=3*5,a*4),a+5先計(jì)算出a的值等于15,再進(jìn)行a*4的運(yùn)算得60(但a值未變,仍為15),再進(jìn)行a+5得20,即整個(gè)表達(dá)式的值為20。,3.10逗號運(yùn)算符和逗號表達(dá)式,逗號運(yùn)算符是所有運(yùn)算符中級別最低的例:①x=(a=3,6*3)②x=a=3,6*3,賦值表達(dá)式,將一個(gè)逗號表達(dá)式的值賦給x,x的值等于18,逗號表達(dá)式,包括一個(gè)賦值表達(dá)式和一個(gè)算術(shù)表達(dá)式,x的值為3,整個(gè)逗號表達(dá)式的值為18。,3.10逗號運(yùn)算符和逗號表達(dá)式,注意:并不是任何地方出現(xiàn)的逗號都是作為逗號運(yùn)算符。例如函數(shù)參數(shù)也是用逗號來間隔的。如:printf(“%d,%d,%d”,a,b,c);,“a,b,c”并不是一個(gè)逗號表達(dá)式,它是printf函數(shù)的3個(gè)參數(shù),printf(“%d,%d,%d”,(a,b,c),b,c),“(a,b,c)”是一個(gè)逗號表達(dá)式,它的值等于c的值。,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 數(shù)據(jù)類型
鏈接地址:http://kudomayuko.com/p-11494769.html