計(jì)算機(jī)二級(jí)等級(jí)考試C語(yǔ)言關(guān)于編譯預(yù)處理與位運(yùn)算的講解公開課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第1頁(yè)
計(jì)算機(jī)二級(jí)等級(jí)考試C語(yǔ)言關(guān)于編譯預(yù)處理與位運(yùn)算的講解公開課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第2頁(yè)
計(jì)算機(jī)二級(jí)等級(jí)考試C語(yǔ)言關(guān)于編譯預(yù)處理與位運(yùn)算的講解公開課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第3頁(yè)
計(jì)算機(jī)二級(jí)等級(jí)考試C語(yǔ)言關(guān)于編譯預(yù)處理與位運(yùn)算的講解公開課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第4頁(yè)
計(jì)算機(jī)二級(jí)等級(jí)考試C語(yǔ)言關(guān)于編譯預(yù)處理與位運(yùn)算的講解公開課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第10章編譯預(yù)處理與位運(yùn)算10.1編譯預(yù)處理編譯預(yù)處理:是在編譯前由編譯系統(tǒng)中預(yù)處理程序?qū)υ闯绦蝾A(yù)處理命令進(jìn)行加工。源程序中預(yù)處理命令均以“#”開頭,命令末尾不加分號(hào),它們能夠?qū)懺诔绦蛑腥魏挝恢?,作用域是從出現(xiàn)位置開始到源程序結(jié)束.10.1.1宏定義宏定義是定義一個(gè)標(biāo)識(shí)符來(lái)代替一個(gè)字符串。宏定義有不帶參數(shù)宏定義和帶參數(shù)宏定義兩種。1.不帶參數(shù)宏定義定義形式:#define標(biāo)識(shí)符字符串功效:用一個(gè)指定標(biāo)識(shí)符(即名字,稱為宏名)來(lái)代表一個(gè)字符串。比如:#definePI3.1415926說(shuō)明:(1)與其它標(biāo)識(shí)符相區(qū)分,宏名普通用大寫字母表示。(2)編譯預(yù)處理時(shí),將程序中宏名用字符串代替,這種將宏名替換成字符串過(guò)程稱為“宏展開”。(3)使用宏能夠降低程序中重復(fù)書寫或修改一些字符串工作量.(4)在程序中出現(xiàn)在雙引號(hào)中或其它字符串中與宏名相同字符串,不能作為宏處理。(5)#define命令作用范圍從定義位置至源程序結(jié)束,但能夠用#undef終止其作用域。10.1.1宏定義例1:#definePI3.1415926main(){floatl,s,r;scanf("%d",&r);l=2.0*PI*r;s=PI*r*r;printf("l=%f\n",l);printf("s=%f\n",s);}main(){floatl,s,r;scanf("%d",&r);l=2.0*3.1415926*r;s=3.1415926*r*r;printf("l=%f\n",l);printf("s=%f\n",s);}展開例2:#definePI3.1415926main(){…}#undefPIfun(){…}10.1.1宏定義10.1.1宏定義(6)宏定義時(shí),能夠引用已定義宏名,編譯時(shí)層層展開。例3:#definePI3.1415926#defineR3.0#defineL2*PI*R#defineXR+Lmain(){…y=2*X;…}main(){…y=2*3.0+2*3.1415926*3.0;…}展開(7)宏名是一個(gè)常量標(biāo)識(shí)符,不是變量,不分配內(nèi)存空間。2.帶參數(shù)宏定義定義形式:#define標(biāo)識(shí)符(參數(shù)表)字符串功效:用指定帶參數(shù)標(biāo)識(shí)符來(lái)代表一個(gè)字符串。注意:帶參數(shù)宏展開時(shí)要用實(shí)參字符串替換形參字符串。例4:#defineS(x)2*x*xmain(){…

y=S(2+2);…}main(){…y=2*2+2*2+2;…}展開注意:展開時(shí)用實(shí)參字符串2+2替換形參字符串x,2+2是字符串,不能看做表示式,即S不能展開為2*(2+2)*(2+2)。10.1.1宏定義10.1.2文件包含文件包含是一個(gè)源程序經(jīng)過(guò)#include命令把另外一個(gè)文件全部?jī)?nèi)容嵌入到源程序中。文件包含命令有以下兩種格式:#include<文件名>#include"文件名"功效:將指定文件全部?jī)?nèi)容放到該命令行所在位置。說(shuō)明:命令#include<文件名>在搜索文件時(shí)只檢索C語(yǔ)言編譯系統(tǒng)所確定標(biāo)準(zhǔn)目錄,而命令#include"文件名"在搜索文件時(shí)首先對(duì)使用包含文件源程序文件所在目錄進(jìn)行檢索,若沒(méi)有找到指定文件,再在標(biāo)準(zhǔn)目錄中檢索。10.2位運(yùn)算數(shù)據(jù)在計(jì)算機(jī)內(nèi)部是以二進(jìn)制補(bǔ)碼形式存放。1.按位與運(yùn)算符:&若參加運(yùn)算兩個(gè)操作數(shù)對(duì)應(yīng)兩個(gè)二進(jìn)制位都是1,則對(duì)應(yīng)位結(jié)果為二進(jìn)制位1,不然為0。例1:求5&3值。運(yùn)算過(guò)程以下: 0000000000000101(5補(bǔ)碼)& 0000000000000011(3補(bǔ)碼) 0000000000000001(1補(bǔ)碼,即5&3=1)2.按位或運(yùn)算符:|若參加運(yùn)算兩個(gè)操作數(shù)對(duì)應(yīng)兩個(gè)二進(jìn)制位有一個(gè)為1,則對(duì)應(yīng)位結(jié)果為二進(jìn)制位1,不然為0。例2:求5|3值。運(yùn)算過(guò)程以下: 0000000000000101(5補(bǔ)碼)

| 0000000000000011(3補(bǔ)碼) 0000000000000111(7補(bǔ)碼,即5|3=7)10.2位運(yùn)算3.按位異或運(yùn)算符:^若參加運(yùn)算兩個(gè)操作數(shù)對(duì)應(yīng)兩個(gè)二進(jìn)制位相異(一個(gè)為1,另一個(gè)為0),則對(duì)應(yīng)位結(jié)果為二進(jìn)制位1,不然為0。例3:求5^3值。運(yùn)算過(guò)程以下:0000000000000101(5補(bǔ)碼)^0000000000000011(3補(bǔ)碼) 0000000000000110(6補(bǔ)碼,即5^3=6)10.2位運(yùn)算4.按位取反運(yùn)算符:~“~”操作數(shù)只有一個(gè),若操作數(shù)某二進(jìn)制位為1,則對(duì)應(yīng)位結(jié)果為0,若操作數(shù)某二進(jìn)制位為0,則對(duì)應(yīng)位結(jié)果為1,例4:求~5值。運(yùn)算過(guò)程以下:~0000000000000101(5補(bǔ)碼)1111111111111010(-6補(bǔ)碼,即~5=-6)10.2位運(yùn)算5.左移運(yùn)算符:<<左移運(yùn)算普通形式為:操作數(shù)<<移位位數(shù)功效:將一個(gè)操作數(shù)全部二進(jìn)制位依次左移若干位,高位移出并舍棄,低位補(bǔ)0。例5:求5<<3值。運(yùn)算過(guò)程以下: 0000000000000101(5補(bǔ)碼)

<<3 0000000000000101000(40補(bǔ)碼,即5<<3=40)10.2位運(yùn)算6.右移運(yùn)算符:>>左移運(yùn)算普通形式為:操作數(shù)>>移位位數(shù)功效:將一個(gè)操作數(shù)全部二進(jìn)制位依次右移動(dòng)若干位。若操作數(shù)為無(wú)符號(hào)數(shù)或正數(shù),移出低位被舍棄,高位補(bǔ)0。這種移位操作又稱邏輯右移。若操作數(shù)為有符號(hào)數(shù)負(fù)數(shù),即最高位為1時(shí),右移時(shí)高位補(bǔ)1,以保持符號(hào)位不變,低位移出并舍棄。這種移位操作又稱算術(shù)右移。例6:求5>>1值。運(yùn)算過(guò)程以下: 0000000000000101(5補(bǔ)碼)

>>1 00000000000000100(2補(bǔ)碼,即5>>1=2)10.2位運(yùn)算7.位運(yùn)算應(yīng)用舉例例10.1取一個(gè)整數(shù)a從右端開始第4~7位。程序以下:#include<stdio.h>main(){unsigneda,b,c,d;scanf("%o",&a);b=a>>4;c=~(~0<<4);d=b&c;printf("%o,%d\n%o,%d\n",a,a,d,d);}10.2位運(yùn)算10.3本章考點(diǎn)宏定義。文件包含。位運(yùn)算。10.4經(jīng)典試題詳解1.有以下程序:#defineN2#defineMN+1#defineNUM2*M+1main(){inti;for(i=1;i<=NUM;i++)printf("%d\n",i);}該程序中for循環(huán)執(zhí)行次數(shù)是________。正確答案:6(知識(shí)點(diǎn):不帶參數(shù)宏定義)2.程序中頭文件type1.h內(nèi)容是:#defineN5#defineM1N*3程序以下:#include"type1.h"#defineM2N*2main(){inti;i=M1+M2;printf("%d\n",i);}程序編譯后運(yùn)行輸出結(jié)果是________。正確答案:25(知識(shí)點(diǎn):文件包含、不帶參數(shù)宏定義)10.4經(jīng)典試題詳解3.以下程序輸出結(jié)果是________。#defineSQR(X)X*Xmain(){inta=16,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}正確答案:2(知識(shí)點(diǎn):帶參數(shù)宏定義)10.4經(jīng)典試題詳解4.有以下程序:main(){intx=3,y=2,z=1;printf("%d\n",x/y&~z); }程序運(yùn)行后輸出結(jié)果是________。A)3

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論