一、基本語言元素二、基本數(shù)據(jù)類型三、算術(shù)負(fù)運(yùn)算與補(bǔ)碼轉(zhuǎn)換_第1頁
一、基本語言元素二、基本數(shù)據(jù)類型三、算術(shù)負(fù)運(yùn)算與補(bǔ)碼轉(zhuǎn)換_第2頁
一、基本語言元素二、基本數(shù)據(jù)類型三、算術(shù)負(fù)運(yùn)算與補(bǔ)碼轉(zhuǎn)換_第3頁
一、基本語言元素二、基本數(shù)據(jù)類型三、算術(shù)負(fù)運(yùn)算與補(bǔ)碼轉(zhuǎn)換_第4頁
一、基本語言元素二、基本數(shù)據(jù)類型三、算術(shù)負(fù)運(yùn)算與補(bǔ)碼轉(zhuǎn)換_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

一、基本語言元素

二、基本數(shù)據(jù)類型

三、算術(shù)負(fù)運(yùn)算與補(bǔ)碼轉(zhuǎn)換第二章基本元素、類型和概念1一、基本語言元素

1.C/C++中的字符集

每一種語言有各自的基本元素。C/C++語言的詞法分析建立在對基本元素的掃描、上下文匹配和排列組合之上?;绢愋褪荂++作為強(qiáng)類型語言處理各種數(shù)據(jù)的基本尺度。通過基本元素和類型完成文字符號的轉(zhuǎn)換以及源頭處的求值計(jì)算。關(guān)于基本元素的約定就形成詞法規(guī)定,由此形成定義、聲明、表達(dá)式、語句和函數(shù)進(jìn)而建立完整的程序。2C/C++中的字符集由下列字符構(gòu)成:

a.

26個(gè)大小寫英文字母:a~z,A~Z

b.

10個(gè)數(shù)字字符:0~9

c.

標(biāo)點(diǎn)符號:空格~!#%^&*()_-+={}[]:;'",<>./?\|C/C++中的標(biāo)點(diǎn)符號對編譯器而言具有詞法意義,某些標(biāo)點(diǎn)符號為C/C++的運(yùn)算符或?qū)︻A(yù)處理器有重要意義。標(biāo)點(diǎn)符號[]、()和{}必須成對出現(xiàn)。C/C++中的字符集一共91個(gè)字符,實(shí)際上包含可鍵入的字母,只有三個(gè)例外它們是:@、$、`。32.語言符號語言符號是C/C++語言有意義的最小單元.

a.空白字符:空格、水平制表、換行、回車、換頁、縱向制表和換行符都稱為空白字符

b.標(biāo)識符:所有的名稱在索引點(diǎn)前必須先有效的說明

c.關(guān)鍵字:關(guān)鍵字是系統(tǒng)預(yù)定義的保留標(biāo)識符

d.標(biāo)點(diǎn)符號和分隔符;

e.文字常數(shù);

f.運(yùn)算符;

4(1)空白字符空格、水平制表、換行、回車、換頁、縱向制表(verticaltab)和換行(newline)符都稱為空白字符(white-space),它們具有相同的功能即作為打印頁上單詞和行之間的空白。通過空白字符和其它語言符號,例如運(yùn)算符和標(biāo)點(diǎn),從而對語言符號進(jìn)行定界。對代碼進(jìn)行詞法分析時(shí),編譯器忽略空白字符,除非它們作為分隔符或字符串的組成成分。5

(2)標(biāo)識符所有的名稱在索引點(diǎn)前必須先有效的說明,否則是無效的標(biāo)識符。標(biāo)識符是程序員引入的有效的名稱,是編譯器許可的名稱。對象名、變量名或函數(shù)名,結(jié)構(gòu)名、類類型名、枚舉名、聯(lián)合名或成員名,typedef名稱、標(biāo)號名、宏名、宏形參名、形參名等遵循標(biāo)識符的命名規(guī)定。6標(biāo)識符或名稱的命名規(guī)定如下:

a.標(biāo)識符的字符序列僅由下劃線“_”、數(shù)字0~9與26個(gè)大小寫字母a~z,A~Z構(gòu)成。

b.標(biāo)識符的首字符必須是大寫字母或小寫字母或一個(gè)下劃線“_”而不能是數(shù)字開頭。

c.標(biāo)識符不能與關(guān)鍵字使用一樣的拼寫和大小寫方式。

d.標(biāo)識符對大小寫字母敏感,即大寫字母或小寫字母代表不同的名稱。

例如:和是不同的名稱。標(biāo)識符中含有關(guān)鍵字是合法的,例如pint是一個(gè)合法的標(biāo)識符,盡管它包含了關(guān)鍵字int。而1ab,&x,#ddd,9y不是有效的標(biāo)識符。7(3)關(guān)鍵字關(guān)鍵字是系統(tǒng)預(yù)定義的保留標(biāo)識符。它們不能再定義用作程序中的標(biāo)識符。關(guān)鍵字是語言標(biāo)準(zhǔn)的制定者提供給用戶使用的舉足輕重的語言單詞。ANSIC89規(guī)定32個(gè)保留字,C++在此基礎(chǔ)上增添了以斜體表示的28個(gè)關(guān)鍵字。8以下是這些關(guān)鍵字和其主要作用的非嚴(yán)格歸類:

1.基本類型charintfloatdoublelongshortsignedunsignedbool

2.自引入類型classenumstructunion

3.內(nèi)存大小和類名聲明sizeoftypedef

4.存儲屬性autoregisterstaticextern

5.數(shù)據(jù)凍結(jié)和變動constvolatilemutable

6.邏輯真假falsetrue

7.運(yùn)算符和內(nèi)存操作operatornewdeletethis9

8.流程語句的控制trythrowcatchifelsedowhileforcontinueswitchcasedefaultbreakgotoreturn

9.成員訪問控制privateprotectedpublicfriend

10.函數(shù)修飾詞voidinlinevirtualexplicit

11.模板和名稱空間templatetypenamenamespaceusing

12.類型轉(zhuǎn)換運(yùn)算const_castdynamic_castreinterpret_caststatic_casttypeid10(4)分隔符分隔符是用來分隔單詞或程序正文的,它用來表示某個(gè)程序段的結(jié)束和另一個(gè)程序段的開始,或者增加程序的可讀性。常用的分隔符如下所述:a.圓括號()圓括號用于增加程序的可讀性以及提高表達(dá)式運(yùn)算的優(yōu)先級。

b.空格符常用來作為名稱和名稱或運(yùn)算符之間的分隔符。

c.逗號,逗號用來作為定義多個(gè)變量之間的分隔符;或者用來作為函數(shù)的多個(gè)參數(shù)之間的分隔符。逗號還可以用作運(yùn)算符。11

d.分號;用于循環(huán)語句中for關(guān)鍵字后面括號中三個(gè)表達(dá)式的分隔,用于終止分號前的語句?;ɡㄌ杮}后的分號表示一個(gè)聲明的結(jié)束。

e.冒號:用來作語句標(biāo)號與語句之間的分隔符和switch語句中關(guān)鍵字case與語句序列之間的分隔符。用于表示繼承的上下關(guān)系、構(gòu)造函數(shù)的冒號語法和訪問作用界定。

f.花括號{}用來構(gòu)造程序,形成程序塊的層次體系。

g.省略號...,三個(gè)圓點(diǎn)構(gòu)成的省略號用來聲明函數(shù)的可變參數(shù)。12(5)文字常數(shù)文字常數(shù)是在程序中直接使用字符序列表示的數(shù)據(jù),文字常數(shù)亦簡稱為常數(shù)或文字。文字常數(shù)有整型常數(shù)、浮點(diǎn)常數(shù)、字符常數(shù)、字符串常數(shù)。13二、基本數(shù)據(jù)類型

數(shù)據(jù)狀態(tài)的數(shù)學(xué)描述形成數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)的操作是對數(shù)據(jù)的狀態(tài)進(jìn)行改變,通過特定的操作步驟數(shù)據(jù)從一種狀態(tài)變成另一種狀態(tài),這些操作步驟就形成一套算法,因此程序是由數(shù)據(jù)結(jié)構(gòu)與建立其上的相應(yīng)算法構(gòu)成的。不同的數(shù)據(jù)結(jié)構(gòu)對應(yīng)不同的算法,這是所有計(jì)算機(jī)語言共有的特征。本課件用type或T,T1,T2,Tn等代表類型名。type或T1,T2可以是char,short,int,long等整型和float,double,longdouble浮點(diǎn)型或結(jié)構(gòu)名,聯(lián)合名,枚舉名和類類型名等,它們可先通過struct,class,enum,union或Typedef等聲明。14數(shù)據(jù)類型基本數(shù)據(jù)類型指針類型type*(含void*)引用類型type&(無void數(shù)據(jù)更無void&數(shù)據(jù))枚舉類型enum(枚舉常數(shù)為有限個(gè)int型常數(shù))集合數(shù)據(jù)類型數(shù)組類型array[]結(jié)構(gòu)類型struct聯(lián)合類型union類類型class整型intshortlong字符型char(屬于1字節(jié)的整型)單精度浮點(diǎn)型float實(shí)型雙精度浮點(diǎn)型double長雙精度浮點(diǎn)型longdouble布爾邏輯型bool15類型名type說明長度數(shù)據(jù)范圍bool布爾邏輯型1true(1)false(0)char字符型l-128~127(0~255)unsignedchar無符號字符型10~255signedchar有符號字符型1-128~127[signed]short[int]有符號短整型2-32768~32767unsignedshort[int]無符號短整型2-32768~32767[signed]int有符號整型2/4-32768~32767unsigned[int]無符號整型2/40~65535[signed]long[int]有符號長整型4-2147483648~2147483647unsignedlong[int]無符號長型型40~4294967295float浮點(diǎn)型43.4*10e-38~~3.4*10e38double雙精度型81.7*10e-308~~1.7*10e308longdouble長雙精度型8/10至少與double類型同16描述數(shù)據(jù)的狀態(tài)首先要獲得數(shù)據(jù)的類型,通過引入變量的概念來確定數(shù)據(jù)的狀態(tài)。變量是存儲信息的單元,它對應(yīng)于某個(gè)內(nèi)存空間。變量名代表其存儲空間,程序能在變量中存儲值和取出值。在定義變量時(shí),說明的變量名稱和數(shù)據(jù)類型(如int)告訴編譯器要為變量分配多少內(nèi)存空間,以及變量中要存儲什么類型的值。內(nèi)存單元的單位是字節(jié)。

C++是一門強(qiáng)數(shù)據(jù)類型的語言,每一種數(shù)據(jù)一般都嚴(yán)格地對應(yīng)確定的數(shù)據(jù)類型。C/C++的數(shù)據(jù)類型有基本數(shù)據(jù)類型和非基本數(shù)據(jù)類型之分?;緮?shù)據(jù)類型是C/C++內(nèi)部預(yù)先定義的數(shù)據(jù)類型,非基本數(shù)據(jù)類型包括指針、數(shù)組和結(jié)構(gòu)以及類類型等,非基本數(shù)據(jù)類型也稱用戶引入的數(shù)據(jù)類型。17基本數(shù)據(jù)類型有:char(字符型)、int(整型)、float(單精度浮點(diǎn)型)和double(雙精度浮點(diǎn)型)。在ANSIC++中,還有bool(布爾型).bool類型的變量其結(jié)果值用真true假false表示,true就是1,false就是0。關(guān)鍵字char、int、float、double和bool等為基本數(shù)據(jù)類型的類名。類名不占內(nèi)存空間。關(guān)鍵字void具有特殊的含義,因?yàn)闆]有void型的數(shù)據(jù),只有void*型的指針。除上述基本數(shù)據(jù)類型外,還有一些類型修飾符,它用來改變基本類型的意義。修飾符有1ong(長型符)、short(短型符)、signed(有符號)和unsigned(無符號)。18short只修飾int,shortint可省略為short,long修飾int和double,1ongint可省略為1ong,一般表示4個(gè)字節(jié),修飾longdouble時(shí),一般表示8或10個(gè)字節(jié)。unsined和signed能修飾char,short,int和long。數(shù)據(jù)類型確定了數(shù)據(jù)所占內(nèi)存空間大小,也確定了數(shù)據(jù)的范圍。數(shù)據(jù)類型的數(shù)域范圍記錄在頭文件limits.h和float.H中。int類型必然不小于short類型,不大于long類型,在16位系統(tǒng)里是2個(gè)字節(jié)長,32位系統(tǒng)里為4個(gè)字節(jié)長。整數(shù)類型包括char,short,long,signed,unsigned等。枚舉常數(shù)和當(dāng)作右值使用的枚舉變量可視為int類型看待。19float類型是4字節(jié)的浮點(diǎn)數(shù)。double是8字節(jié)的浮點(diǎn)數(shù),也是32位浮點(diǎn)數(shù)學(xué)協(xié)處理器進(jìn)行表達(dá)式運(yùn)算的標(biāo)準(zhǔn)類型,double類型是浮點(diǎn)數(shù)的缺省類型,float類型的數(shù)據(jù)一般會轉(zhuǎn)換到double類型的數(shù)據(jù)進(jìn)行運(yùn)算。浮點(diǎn)類型包括float,double和longdouble類型。longdoulbe類型表示浮點(diǎn)處理器的幕后精度和數(shù)據(jù)范圍的擴(kuò)充優(yōu)化處理,當(dāng)程序員感到64位double內(nèi)存不足以處理符點(diǎn)數(shù)的運(yùn)算時(shí),就設(shè)置longdouble變量。以便編譯器啟動80位的內(nèi)部臨時(shí)運(yùn)算寄存單元。20微軟編譯器的longdouble變量只占8字節(jié)的內(nèi)存,但longdouble和double是不同的數(shù)據(jù)類型。字符型整型浮點(diǎn)型統(tǒng)稱為算術(shù)類型。這樣數(shù)據(jù)的狀態(tài)通過變量來索引,變量由這里介紹的類型名引入,通過定義語句分配內(nèi)存。例如:doubled;shorts;longn;變量d具有類型屬性double,其數(shù)據(jù)占有8字節(jié)的內(nèi)存。short型變量s具有2字節(jié)內(nèi)存,long型變量n具有4字節(jié)內(nèi)存。21三、算術(shù)負(fù)運(yùn)算與補(bǔ)碼轉(zhuǎn)換一個(gè)十進(jìn)制數(shù)可以用字符串抽象的表示為:具體展開為:

字符串中的字符就限制在0,1,2,3,4,5,6,7,8,9十個(gè)字符數(shù)碼中取值。十進(jìn)制數(shù)的基數(shù)為10。遵循逢十進(jìn)一的運(yùn)算規(guī)則。10k稱為第k+1位數(shù)字的權(quán)。22例如:,是第3位數(shù)的權(quán),其結(jié)果是三位數(shù)的值。一般地基數(shù)為r的r進(jìn)制數(shù)的值可以表示為:其含義就是:其中可以是0,1,2,...,r-1中的數(shù)碼,rk稱為第k+1位數(shù)字的權(quán)即以r為底的k次冪,遵循逢r進(jìn)位的原則。這樣從上面一般的公式得到二進(jìn)制數(shù)的值為:整型數(shù)分有符號和無符號兩種。無符號整數(shù)的最高的位數(shù)為該數(shù)的有機(jī)組成部分。有符號整數(shù)其最高的位用于識別數(shù)的正負(fù),最高為0表示一個(gè)正數(shù),1則表示負(fù)數(shù)。 23

例如:8位長的二進(jìn)制數(shù)00000001b=+1d,01111111b=+127d,00000000b=-127d正數(shù)不做補(bǔ)碼原碼轉(zhuǎn)換,即正數(shù)的原碼、補(bǔ)碼相同。例如:對于二進(jìn)制數(shù)11111111可以理解為無符號數(shù)的255,也可以理解為原碼-127,同時(shí)可以視為-1的補(bǔ)碼。

求補(bǔ)的含義分為兩種:一種是直接求補(bǔ),另一種是間接求補(bǔ)。直接求補(bǔ)是C/C++語言的單目算術(shù)負(fù)運(yùn)算,其含義為對于一個(gè)數(shù)取補(bǔ)就是對單目操作數(shù)按位求反最低位加1,按位求反操作就是1切換為0,0切換為1。算術(shù)負(fù)運(yùn)算的源操作數(shù)無論數(shù)的正負(fù)。24例如:2進(jìn)制數(shù)16進(jìn)制數(shù)2進(jìn)制數(shù)16進(jìn)制數(shù)原操作數(shù):11000011c3001111013d按位取反001111003c11000010c2最低位加1001111013d11000011c3十六進(jìn)制數(shù)3d直接求補(bǔ)的結(jié)果為c3。十六進(jìn)制數(shù)c3直接求補(bǔ)的結(jié)果為3d。例如語句:

printf("0x%x,0x%x\n",-0x10234567,-0xefdcba99);輸出結(jié)果:0xefdcba99,0x10234567從上可以看出直接求補(bǔ)偶次得到原來的操作數(shù)。25間接求補(bǔ)運(yùn)算僅對最高位為1的有符號數(shù)進(jìn)行。當(dāng)內(nèi)存數(shù)據(jù)最高位為1時(shí),如果需要執(zhí)行有符號數(shù)的轉(zhuǎn)換,以便得到這個(gè)數(shù)的原碼,間接求補(bǔ)運(yùn)算發(fā)生作用。 間接求補(bǔ)的運(yùn)算規(guī)則可根據(jù)下面二個(gè)步驟進(jìn)行:1.將最高位的1變?yōu)?,這就是取負(fù)數(shù)的絕對值。2.對負(fù)數(shù)的絕對值執(zhí)行直接求補(bǔ)運(yùn)算。例如對于最高位為1的16進(jìn)制數(shù)ae,d2的二次求補(bǔ)為:16進(jìn)制數(shù)2進(jìn)制數(shù)16進(jìn)制數(shù)2進(jìn)制數(shù)數(shù)據(jù)的原值ae10101110d211010010最高位清02e001011105201010010按位取反d111010001ad10101101最低位加1d211010010ae1010111026下面兩個(gè)步驟也可以得到最高位為1的數(shù)(視為負(fù)數(shù))的原碼:

1.對負(fù)數(shù)進(jìn)行直接求補(bǔ)運(yùn)算。由此得到負(fù)數(shù)原碼的絕對值

2.將最高位設(shè)置為1。這也就是在負(fù)數(shù)的絕對值之前加上負(fù)號例如對于最高位為

溫馨提示

  • 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

提交評論