一、基本語言元素二、基本數據類型三、算術負運算與補碼轉換_第1頁
一、基本語言元素二、基本數據類型三、算術負運算與補碼轉換_第2頁
一、基本語言元素二、基本數據類型三、算術負運算與補碼轉換_第3頁
一、基本語言元素二、基本數據類型三、算術負運算與補碼轉換_第4頁
一、基本語言元素二、基本數據類型三、算術負運算與補碼轉換_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一、基本語言元素

二、基本數據類型

三、算術負運算與補碼轉換第二章基本元素、類型和概念1一、基本語言元素

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

每一種語言有各自的基本元素。C/C++語言的詞法分析建立在對基本元素的掃描、上下文匹配和排列組合之上。基本類型是C++作為強類型語言處理各種數據的基本尺度。通過基本元素和類型完成文字符號的轉換以及源頭處的求值計算。關于基本元素的約定就形成詞法規定,由此形成定義、聲明、表達式、語句和函數進而建立完整的程序。2C/C++中的字符集由下列字符構成:

a.

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

b.

10個數字字符:0~9

c.

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

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

b.標識符:所有的名稱在索引點前必須先有效的說明

c.關鍵字:關鍵字是系統預定義的保留標識符

d.標點符號和分隔符;

e.文字常數;

f.運算符;

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

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

a.標識符的字符序列僅由下劃線“_”、數字0~9與26個大小寫字母a~z,A~Z構成。

b.標識符的首字符必須是大寫字母或小寫字母或一個下劃線“_”而不能是數字開頭。

c.標識符不能與關鍵字使用一樣的拼寫和大小寫方式。

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

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

1.基本類型charintfloatdoublelongshortsignedunsignedbool

2.自引入類型classenumstructunion

3.內存大小和類名聲明sizeoftypedef

4.存儲屬性autoregisterstaticextern

5.數據凍結和變動constvolatilemutable

6.邏輯真假falsetrue

7.運算符和內存操作operatornewdeletethis9

8.流程語句的控制trythrowcatchifelsedowhileforcontinueswitchcasedefaultbreakgotoreturn

9.成員訪問控制privateprotectedpublicfriend

10.函數修飾詞voidinlinevirtualexplicit

11.模板和名稱空間templatetypenamenamespaceusing

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

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

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

d.分號;用于循環語句中for關鍵字后面括號中三個表達式的分隔,用于終止分號前的語句。花括號{}后的分號表示一個聲明的結束。

e.冒號:用來作語句標號與語句之間的分隔符和switch語句中關鍵字case與語句序列之間的分隔符。用于表示繼承的上下關系、構造函數的冒號語法和訪問作用界定。

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

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

數據狀態的數學描述形成數據結構,數據的操作是對數據的狀態進行改變,通過特定的操作步驟數據從一種狀態變成另一種狀態,這些操作步驟就形成一套算法,因此程序是由數據結構與建立其上的相應算法構成的。不同的數據結構對應不同的算法,這是所有計算機語言共有的特征。本課件用type或T,T1,T2,Tn等代表類型名。type或T1,T2可以是char,short,int,long等整型和float,double,longdouble浮點型或結構名,聯合名,枚舉名和類類型名等,它們可先通過struct,class,enum,union或Typedef等聲明。14數據類型基本數據類型指針類型type*(含void*)引用類型type&(無void數據更無void&數據)枚舉類型enum(枚舉常數為有限個int型常數)集合數據類型數組類型array[]結構類型struct聯合類型union類類型class整型intshortlong字符型char(屬于1字節的整型)單精度浮點型float實型雙精度浮點型double長雙精度浮點型longdouble布爾邏輯型bool15類型名type說明長度數據范圍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浮點型43.4*10e-38~~3.4*10e38double雙精度型81.7*10e-308~~1.7*10e308longdouble長雙精度型8/10至少與double類型同16描述數據的狀態首先要獲得數據的類型,通過引入變量的概念來確定數據的狀態。變量是存儲信息的單元,它對應于某個內存空間。變量名代表其存儲空間,程序能在變量中存儲值和取出值。在定義變量時,說明的變量名稱和數據類型(如int)告訴編譯器要為變量分配多少內存空間,以及變量中要存儲什么類型的值。內存單元的單位是字節。

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

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

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

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

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

1.對負數進行直接求補運算。由此得到負數原碼的絕對值

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

溫馨提示

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

評論

0/150

提交評論