第5講編譯預(yù)處理和位運(yùn)算_第1頁
第5講編譯預(yù)處理和位運(yùn)算_第2頁
第5講編譯預(yù)處理和位運(yùn)算_第3頁
第5講編譯預(yù)處理和位運(yùn)算_第4頁
第5講編譯預(yù)處理和位運(yùn)算_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第第5 5講編譯預(yù)處理和位運(yùn)算講編譯預(yù)處理和位運(yùn)算一、編譯預(yù)處理一、編譯預(yù)處理 1 1、宏定義、宏定義 2 2、文件包含、文件包含 二、位運(yùn)算二、位運(yùn)算 1、概念、概念: 用標(biāo)識(shí)符來表示一個(gè)字符串,標(biāo)識(shí)符叫宏名。用標(biāo)識(shí)符來表示一個(gè)字符串,標(biāo)識(shí)符叫宏名。一、宏定義:一、宏定義: (P5)2、無參宏定義、無參宏定義 1)無參宏定義的一般)無參宏定義的一般格式格式: #define 標(biāo)識(shí)符標(biāo)識(shí)符 字符串字符串 例如:例如:#define PI 3.14159 2)作用:)作用:在宏定義之后,凡是該標(biāo)識(shí)符出現(xiàn)的地方用對(duì)應(yīng)在宏定義之后,凡是該標(biāo)識(shí)符出現(xiàn)的地方用對(duì)應(yīng)的字符串來代替。的字符串來代替。 上面

2、的定義之后,凡是上面的定義之后,凡是PI都用都用3.14159來代替。來代替。例例 輸入半徑,計(jì)算以該半徑為圓的周長與圓面積、輸入半徑,計(jì)算以該半徑為圓的周長與圓面積、球的體積與表面積。球的體積與表面積。#include #define PI 3.14159void main( )float r, yzc,ymj,qbmj,qtj;scanf(%f,&r); yzc=2*PI*r; ymj=PI*r*r; qbmj=4*PI*r*r; qtj=4*PI*r*r*r/3;printf(%f,%f,%f,%fn,yzc,ymj,qbmj,qtj);3、帶參數(shù)的宏定義、帶參數(shù)的宏定義 (P8) 1)

3、帶參宏定義的一般)帶參宏定義的一般格式格式: #define 標(biāo)識(shí)符標(biāo)識(shí)符(參數(shù)表參數(shù)表) 字符串字符串 例如:例如:#define ADD(x,y) x+y 2)作用:)作用:在宏定義之后,凡是該標(biāo)識(shí)符出現(xiàn)的地方用對(duì)應(yīng)在宏定義之后,凡是該標(biāo)識(shí)符出現(xiàn)的地方用對(duì)應(yīng)的字符串來代替,參數(shù)也作相應(yīng)的替換。的字符串來代替,參數(shù)也作相應(yīng)的替換。 上面的定義之后,程序中如果出現(xiàn)上面的定義之后,程序中如果出現(xiàn)ADD(4,5),則,則用用 4+5 來代替,出現(xiàn)來代替,出現(xiàn)ADD(a,b),則用,則用 a+b 來代替。來代替。#include #define PI 3.14159#define AREA(r) P

4、I*r*rvoid main( ) float x,s; x=10.0; s=AREA(x); printf(s=%.1fn,s); 寫出下面程序的結(jié)果。寫出下面程序的結(jié)果。執(zhí)行結(jié)果:執(zhí)行結(jié)果:s=314.2#include #define ADD(x,y) x+y#define MAX(x,y) xy?x:yvoid main( ) int a=4,b=5,c,d; c=ADD(a,b); d=MAX(a,b); printf(c=%dtd=%dn,c,d); float w,z; w=ADD(5.6,-5.8); z=MAX(5.6,-5.8); printf(w=%.1ftz=%.1fn

5、,w,z); 寫出下面程序的結(jié)果。寫出下面程序的結(jié)果。執(zhí)行結(jié)果:執(zhí)行結(jié)果:c=5 d=5w=-0.2 z=5.6寫出下面程序的結(jié)果。寫出下面程序的結(jié)果。#include #define MUL(x,y) x*yvoid main( ) int a=3,b=4,c=5,d=6,m1,m2; m1=MUL(a,b); m2=MUL(a+b,c+d); printf(m1=%dn,m1); printf(m2=%dn,m2); 執(zhí)行結(jié)果:執(zhí)行結(jié)果:m1=12m2=29修改方法修改方法1:#include #define MUL(x,y) (x)*(y)void main( ) int a=3,b=4

6、,c=5,d=6,m1,m2; m1=MUL( a , b ); m2=MUL( a+b , c+d ); printf(m1=%dn,m1); printf(m2=%dn,m2); 執(zhí)行結(jié)果:執(zhí)行結(jié)果:m1=12m2=77修改方法修改方法2:#include #define MUL(x,y) x*yvoid main( ) int a=3,b=4,c=5,d=6,m1,m2; m1=MUL(a,b); m2=MUL( (a+b) , (c+d) ); printf(m1=%dn,m1); printf(m2=%dn,m2); 執(zhí)行結(jié)果:執(zhí)行結(jié)果:m1=12m2=771、 文件包含是文件包含是

7、C語言的一個(gè)重要功能,其作用是將語言的一個(gè)重要功能,其作用是將另外一個(gè)文件的內(nèi)容包含進(jìn)來。另外一個(gè)文件的內(nèi)容包含進(jìn)來。C語言使用語言使用#include來實(shí)現(xiàn),命令格式:來實(shí)現(xiàn),命令格式: #include 文件名文件名#include 二、文件包含二、文件包含 (P10)例如:例如: #include stdio.h #include 2、文件包含通常用來解決程序使用、文件包含通常用來解決程序使用C的庫函數(shù)和的庫函數(shù)和公共符號(hào)常量的問題。例如:公共符號(hào)常量的問題。例如:sqrt()函數(shù)、函數(shù)、EOF。3、 兩種格式的區(qū)別兩種格式的區(qū)別 #include “文件名文件名” 表示先在源程序文件的

8、當(dāng)前表示先在源程序文件的當(dāng)前目錄下查找文件,如果當(dāng)前目錄下未找到文件再到包目錄下查找文件,如果當(dāng)前目錄下未找到文件再到包含目錄下查找。含目錄下查找。#include 表示只在包含目錄下查找。表示只在包含目錄下查找。 包含目錄是編譯系統(tǒng)的一個(gè)參數(shù)包含目錄是編譯系統(tǒng)的一個(gè)參數(shù),在,在VC 6.0下通下通過過“工具工具”菜單中的菜單中的“選項(xiàng)選項(xiàng)”、“目錄目錄”來查詢與設(shè)來查詢與設(shè)置,而在置,而在DEV C+下通過下通過“工具工具”菜單中的菜單中的“編譯選編譯選項(xiàng)項(xiàng)”、“目錄目錄”、“C包含文件包含文件”來查詢與設(shè)置。來查詢與設(shè)置。二、位運(yùn)算二、位運(yùn)算 (P44) 位是指二進(jìn)制數(shù)中的一位,其值為位是

9、指二進(jìn)制數(shù)中的一位,其值為0或者或者1。 位運(yùn)位運(yùn)算包括算包括與、或、非、異或、左移、右移與、或、非、異或、左移、右移。 參與位運(yùn)算的兩個(gè)操作數(shù)必須是參與位運(yùn)算的兩個(gè)操作數(shù)必須是字符型字符型或者或者整型整型,不能是實(shí)數(shù)不能是實(shí)數(shù)。如果是操作數(shù)是負(fù)數(shù),則用操作數(shù)的。如果是操作數(shù)是負(fù)數(shù),則用操作數(shù)的補(bǔ)補(bǔ)碼形式碼形式參與運(yùn)算;如果是操作數(shù)是字符,則用操作數(shù)參與運(yùn)算;如果是操作數(shù)是字符,則用操作數(shù)的的ASCII碼碼參與運(yùn)算。參與運(yùn)算。 在進(jìn)行位運(yùn)算時(shí),最好把二個(gè)數(shù)化成二進(jìn)制,然后在進(jìn)行位運(yùn)算時(shí),最好把二個(gè)數(shù)化成二進(jìn)制,然后根據(jù)位運(yùn)算的運(yùn)算規(guī)則進(jìn)行計(jì)算。根據(jù)位運(yùn)算的運(yùn)算規(guī)則進(jìn)行計(jì)算。 每個(gè)位運(yùn)算的規(guī)則是

10、不變的,但計(jì)算結(jié)果可能與每個(gè)位運(yùn)算的規(guī)則是不變的,但計(jì)算結(jié)果可能與參與計(jì)算的參與計(jì)算的操作數(shù)的位數(shù)有關(guān)操作數(shù)的位數(shù)有關(guān)。 1、按位與運(yùn)算、按位與運(yùn)算 &#include void main()char a=3,b=50;printf(a&b=%dn,a&b);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: a&b=2例例1 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。0000 0011=3 & 0011 0010=50 0000 0010=2規(guī)則:二個(gè)為規(guī)則:二個(gè)為1才為才為1,否則為,否則為0。#include void main()char a=-3,b=50;printf(a&b=%dn,a&b);程

11、序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: a&b=48例例2 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。1111 1101=-3 & 0011 0010=50 0011 0000=48 2、按位或運(yùn)算、按位或運(yùn)算 |#include void main()char a=3,b=50;printf(a|b=%dn,a|b);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: a|b=51例例1 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。0000 0011=3 | 0011 0010=50 0011 0011=51規(guī)則:二個(gè)為規(guī)則:二個(gè)為0才為才為0,否則為,否則為1。#include void main()char a

12、=-3,b=50;printf(a|b=%dn,a|b);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: a|b=-1例例2 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。1111 1101=-3 | 0011 0010=50 1111 1111=-1 3、按位異或運(yùn)算、按位異或運(yùn)算 #include void main()char a=3,b=50;printf(ab=%dn,ab);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: ab=49例例1 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。0000 0011=3 0011 0010=50 0011 0001=49規(guī)則:相同為規(guī)則:相同為0,相異為,相異為1。#incl

13、ude void main()char a=-3,b=50;printf(ab=%dn,ab);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: ab=-49例例2 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。1111 1101=-3 0011 0010=50 1100 1111=-49 4、按位非運(yùn)算、按位非運(yùn)算 #include void main()char a=3;printf(a=%dn, a);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: a=-4例例1 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。 0000 0011=3 1111 1100=-4規(guī)則:規(guī)則:0變成變成1,1變成變成0。#include vo

14、id main()char a=-3;printf(a=%dn, a);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: a=2例例2 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。 1111 1101=-3 0000 0010=2 5、左移運(yùn)算、左移運(yùn)算 #include void main()char a=3;printf(a2=%dn, a2);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果:a2=12例例1 寫出下面程序的執(zhí)行結(jié)果。寫出下面程序的執(zhí)行結(jié)果。規(guī)則:符號(hào)位參與移位,左邊移出的位丟棄,右邊補(bǔ)規(guī)則:符號(hào)位參與移位,左邊移出的位丟棄,右邊補(bǔ)0。#include void main()char a=-3;printf(a3=%dn, a3);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果: a#include void main()char a=24;printf(a2=%dn, a2);程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果:a2=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論