c語言程序設(shè)計(jì)_實(shí)驗(yàn)二(數(shù)據(jù)類型、運(yùn)算符與表達(dá)式)_第1頁
c語言程序設(shè)計(jì)_實(shí)驗(yàn)二(數(shù)據(jù)類型、運(yùn)算符與表達(dá)式)_第2頁
c語言程序設(shè)計(jì)_實(shí)驗(yàn)二(數(shù)據(jù)類型、運(yùn)算符與表達(dá)式)_第3頁
c語言程序設(shè)計(jì)_實(shí)驗(yàn)二(數(shù)據(jù)類型、運(yùn)算符與表達(dá)式)_第4頁
c語言程序設(shè)計(jì)_實(shí)驗(yàn)二(數(shù)據(jù)類型、運(yùn)算符與表達(dá)式)_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2.1常量和變量常量和變量2.2整型數(shù)據(jù)整型數(shù)據(jù)2.3實(shí)型數(shù)據(jù)實(shí)型數(shù)據(jù)2.4字符型數(shù)據(jù)字符型數(shù)據(jù)2.5變量賦值變量賦值2.6運(yùn)算符及表達(dá)式運(yùn)算符及表達(dá)式2.7數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換n 任何程序都涉及到待處理的數(shù)據(jù),數(shù)據(jù)可以是常量和變量.nC 語言可以處理的數(shù)據(jù)類型很多,可分為基本類型、復(fù)雜類型,如圖2.1所示。本章將討論C語言的變量和常量、基本數(shù)據(jù)類型、運(yùn)算符和表達(dá)式以及不同數(shù)據(jù)類型之間的轉(zhuǎn)換等。圖圖2.1 2.1 數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型基本類型復(fù)雜類型整型類型浮點(diǎn)數(shù)類型字符型類型單精度型雙精度型構(gòu)造類型指針類型枚舉類型自定義類型數(shù)組類型結(jié)構(gòu)體類型共用體類型n2.1.1 2.1.1 常量常

2、量n 常量又稱常數(shù),是指在程序運(yùn)行中其值不能被改變的量。n常量可分為不同的類型:如n 5、0、-8為整型常量;n 2.5、-1.2為實(shí)型常量;n a、b為字符型常量,也可以用一個(gè)名字(字符序列)來代表一個(gè)常量,如用PI表示3.14,這種常量被稱為符號(hào)常量。符號(hào)常量的使用將在第 8章介紹;還可以用與某些字母組合,表示能夠讓計(jì)算機(jī)運(yùn)行時(shí)完成一固定動(dòng)作的字符常量稱轉(zhuǎn)義字符常量。n2.1.2 2.1.2 變量變量 n 變量是指在程序運(yùn)行過程中其值可以被改變的量。n 變量被分為不同類型,在內(nèi)存中占用不同的存儲(chǔ)單元,以便用來存放相應(yīng)變量的值,編程時(shí),用變量名來標(biāo)識(shí)變量,變量的命名規(guī)則同第1章中標(biāo)識(shí)符的定義

3、規(guī)則相同。n 1.1.變量的有關(guān)規(guī)定變量的有關(guān)規(guī)定n (1)使用變量前,必須先定義,否則不能作為變量來使用.n (2)每一個(gè)變量屬于一種類型,便于在編譯時(shí)為其分配相應(yīng)的存儲(chǔ)單元并據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。n2.2.1 2.2.1 整型常量整型常量n 整型常量有三種表示方法:n (1 1)十進(jìn)制整數(shù))十進(jìn)制整數(shù): :如1236,-234,0。n (2 2)八進(jìn)制整數(shù))八進(jìn)制整數(shù): :以0開頭的數(shù)是八進(jìn)制數(shù)。如 011表示八進(jìn)制數(shù)的n (3 3)十六進(jìn)制整數(shù))十六進(jìn)制整數(shù): :以0 x開頭的數(shù)是十六進(jìn)制數(shù)。如0 x123即(123)16 。n main()n n int x=1246,y

4、=01246,z=0 x1246;n printf(%d,%d,%dn,x,y,z); n /*%d: 以十進(jìn)制格式符輸出 */n printf(%o,%o,%on,x,y,z); n /*%o: 以八進(jìn)制格式符輸出 */n printf(%x,%x,%xn,x,y,z); n /*%x: 以十六進(jìn)制格式符輸出 */n n2.2.2 2.2.2 整型變量整型變量n 整型變量可用來存放整型數(shù)據(jù)(即不帶小數(shù)點(diǎn)的數(shù))。整型變量可以分為:基本型、短整型、長(zhǎng)整型和無符號(hào)整型4種類型,其定義的關(guān)鍵字如下:n (1)基本型:用int表示;n (2)短整型:用short int或short表示;n (3)長(zhǎng)整

5、型:用long int或long表示;n (4)無符號(hào)整型: 無符號(hào)整型無符號(hào)整型: : 用unsigned int或unsigned表示; 無符號(hào)短整型無符號(hào)短整型: :用unsigned short int或unsigned short表示; 無符號(hào)長(zhǎng)整型無符號(hào)長(zhǎng)整型: :用unsigned long int或unsigned long表示。n 以一個(gè)機(jī)器字(word)存放一個(gè)int 型數(shù)據(jù),而long整型數(shù)據(jù)的字節(jié)數(shù)應(yīng)不小于int型,而short型應(yīng)不長(zhǎng)于int型。n 以PC機(jī)為例,整型變量數(shù)值的表示范圍如表2.1所示。n2.2.3 2.2.3 整型變量的使用整型變量的使用n 不同的整型

6、數(shù)據(jù),應(yīng)根據(jù)其特性和取值范圍,將其定義成不同類型的整型變量。 整型數(shù)據(jù)類型 所占位數(shù) 所占字節(jié)數(shù) 數(shù)的表示范圍 int 16 2 -3276832767,即-2152 5-1 short int 16 2 -3276832767,即-215215-1 long int 32 4 -21474836482147483647,即-231231-1 unsigned int 16 2 065535,即0216-1 unsigned short 16 2 065535,即0216-1 unsigned long 32 4 04294967295,即0232-1 表2.1 整型變量數(shù)值取值范圍整型變量數(shù)

7、值取值范圍n2.3.1 2.3.1 實(shí)型常量實(shí)型常量n 在C語言中,把帶小數(shù)的數(shù)稱為實(shí)數(shù)或浮點(diǎn)數(shù)。n 1.1.十進(jìn)制數(shù)形式十進(jìn)制數(shù)形式n 它是由數(shù)字和小數(shù)點(diǎn)組成,如3.14159,-7.2,8.9等都是十進(jìn)制形式。n 2.2.指數(shù)法形式指數(shù)法形式n 如:180000.0用指數(shù)法可以表示為1.8e5,1.8稱為尾數(shù),5稱為指數(shù)。 0.00123用指數(shù)法可以表示為1.23E-3。n 注意注意: :n (1)字母e或E之前(即尾數(shù)部分)必須有數(shù)字。n (2)e或E后面的指數(shù)部分必須是整數(shù)。n2.4.1 2.4.1 字符型常量字符型常量n 字符型常量是由一對(duì)單引號(hào)括起來的單個(gè)字符構(gòu)成,例如,nA,b,

8、2,%,;等都是有效的字符型常量。一個(gè)字符型常量的值是該字符集中對(duì)應(yīng)的編碼值,例如在ASCII字符集中,字符常量09的ASCII編碼值是4857。顯然0與數(shù)字0是不同的。n C語言中還允許用一種特殊形式的字符常量,即以反斜杠字符開頭的字符序列。前面用的printf()函數(shù)中的n,代表一個(gè)“回車換行”符。這類字符稱為“換碼序列”,或“轉(zhuǎn)義字符”,意思是將反斜杠“”后面的字符轉(zhuǎn)換成另外的意義。換碼序列見表2.2。n 例如: n main()n n printf(abct derftgn);n n 運(yùn)行結(jié)果: f gde 換碼序列 意 義 換碼序列 意 義 n 回車換行 r 回車,將當(dāng)前位置移到本行

9、開頭 b 左退一格 t 橫向跳格字符(即跳到下一個(gè)輸出區(qū)) f 換頁 0 空值(NULL) 單引號(hào) 雙引號(hào) v 豎向跳格 ddd 1至3位八進(jìn)制數(shù)所代表的字符 反斜線 xhh 1至2位十六進(jìn)制數(shù)所代表的字符 表2.2 換碼序列表換碼序列表n2.4.2 2.4.2 字符型變量字符型變量n 一個(gè)字符型變量用來存放一個(gè)字符,在內(nèi)存中占一個(gè)字節(jié).實(shí)際上,將一個(gè)字符常數(shù)賦給一個(gè)字符變量,并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的 ASCII代碼放到內(nèi)存單元中,因此,字符型數(shù)據(jù)也可以像整型數(shù)據(jù)那樣使用,可以用來表示一些特定范圍內(nèi)的整數(shù)。n 注意:一個(gè)字符型變量只能存放一個(gè)字符,不能存放一個(gè)字符串。

10、n字符型數(shù)據(jù)與整型數(shù)據(jù)可以通用,且字符型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。n 例2.4 字符型數(shù)據(jù)與整型數(shù)據(jù)可以通用。nmain()n n char c1,c2; /* 定義名為c1,c2的字符型變量 */n c1=65;c2=66; /*將字符ASCII碼值65、66分別賦給c1,c2*/n printf(%c,%cn,c1,c2); n /* 輸出c1,c2對(duì)應(yīng)的字符 */n printf(%d,%dn,c1,c2); n /* 輸出c1,c2對(duì)應(yīng)字符的ASCII碼值 */n n C:a4 n 運(yùn)行結(jié)果為 n A,B n 65,66n 2.4.3 2.4.3 字符串常量字符串常量n 字符串常量是由一對(duì)

11、雙引號(hào)括起來的字符序列,例如program,A,book都是字符串常量,雙引號(hào)僅起定界符的作用,并不是字符串中的字符。字符串常量中不能直接包括單引號(hào)、雙引號(hào)和反斜杠“”,若要使用,可參照換碼序列中介紹的方法。n 字符串常量與字符常量的區(qū)別:n (1)字符串常量是用雙引號(hào)括起來的字符序列;n (2)字符串常量在內(nèi)存中存儲(chǔ)時(shí)有串尾標(biāo)記“0”; n (3)字符串常量允許擴(kuò)展表示法;n (4)C 語言中沒有專門的字符串變量。字符串如果需要存放在變量中,需要用字符型數(shù)組來存放。n 注意:不要將單個(gè)字符組成的字符串常量與字符常量混淆。a為字符常量,而a為字符串常量,不能把一個(gè)字符串常量賦給一個(gè)字符變量。例

12、如下面的用法都是錯(cuò)誤的: n char c1,c2;n c1=a;n c2=CHINA;n 對(duì)于字符串,C 語言中規(guī)定以字符0作為結(jié)束標(biāo)志,系統(tǒng)將根據(jù)該字符判斷字符串是否結(jié)束。字符0由系統(tǒng)自動(dòng)加入到每個(gè)字符串的結(jié)束處,不必由編程人員加入。因此,對(duì)于字符串CHINA,它在內(nèi)存中實(shí)際存放形式如圖2.2所示,其長(zhǎng)度是 6個(gè)字節(jié),而不是 5個(gè)字節(jié)。字符 0所對(duì)應(yīng)的ASCII值為0,即“空”字符。n 為變量賦值有兩種方式:一是變量初始化,即在定義變量的同時(shí)給變量賦予初值。另一種方式是采用先說明變量的類型,然后在執(zhí)行語句體中再賦值給變量。n 1.1.先定義后賦值先定義后賦值 n int a,b,c;n c

13、har d;n float f;n a=2; 圖圖2.2 2.2 字符串的存儲(chǔ)形式字符串的存儲(chǔ)形式 CHINA 0n b=5;n c=10;n d=a;n f=5.7;n 2.2.定義和賦值同時(shí)進(jìn)行定義和賦值同時(shí)進(jìn)行 n int a=5;n short b=10;n char c=a;n float d=7.8;n 3.3.對(duì)幾個(gè)變量同時(shí)賦一個(gè)初值對(duì)幾個(gè)變量同時(shí)賦一個(gè)初值 n int a1=10,a2=10,a3=10;n 初始化不是在編譯階段完成的,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦以初值的。相當(dāng)于一個(gè)賦值語句。例如: n int a=10; n 相當(dāng)于: n int a;n a=10; n 又

14、如:n int a,b,c=20; n 相當(dāng)于: n int a,b,c;n c=20; n C語言的運(yùn)算符非常豐富,使用方法也非常靈活,這是C語言的主要特點(diǎn)。C語言具有 44種運(yùn)算符,其中一部分與其他高級(jí)語言相同,而另外一部分與匯編語言相似。n 運(yùn)算符與運(yùn)算對(duì)象(常量、變量、函數(shù)、表達(dá)式)組合起來,構(gòu)成不同類型的表達(dá)式。C 語言的運(yùn)算符有不同的優(yōu)先級(jí)和結(jié)合方向規(guī)則。如附錄所示,優(yōu)先級(jí)是按由高到低的順序排列的。n C 語言運(yùn)算符可以分為: 算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符等幾類; 若從其在表達(dá)式中與運(yùn)算對(duì)象的關(guān)系上分,可分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。n2.6.

15、1 2.6.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式 n 1.1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符n 算術(shù)運(yùn)算符有加,減,乘,除及取模5種,分別由:n + , -, *, /, % 來表示。n C語言規(guī)定:n (1)取模運(yùn)算符%,僅用于整型變量或整型常量,例如:n5%3,其值為2。n (2)優(yōu)先級(jí): 一個(gè)表達(dá)式中如有多個(gè)運(yùn)算符,則計(jì)算的先后次序?yàn)橄鄳?yīng)運(yùn)算符的優(yōu)先級(jí)高的優(yōu)先。乘、除、取模優(yōu)先級(jí)高于加、減的優(yōu)先級(jí),即先乘、除、取模,后加、減。n (3)結(jié)合方向: 是當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)別相同時(shí),應(yīng)遵循的處理規(guī)則,即進(jìn)行運(yùn)算(處理)的結(jié)合方向。算術(shù)運(yùn)算符的結(jié)合方向是從左至右; 賦值運(yùn)算符的

16、結(jié)合方向是從右至左。n 2.2.算術(shù)表達(dá)式算術(shù)表達(dá)式n 由算術(shù)運(yùn)算符、括號(hào)以及操作對(duì)象組成的符合C語言語法規(guī)則的表達(dá)式稱為算術(shù)表達(dá)式。例如下述式子均為算術(shù)表達(dá)式:n a+b*c+(x/y)-700n 100%3+100*2n2.6.2 2.6.2 賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 n 1. 1.賦值運(yùn)算符賦值運(yùn)算符n C語言的賦值運(yùn)算符是“=”,它的作用是將賦值運(yùn)算符右邊表達(dá)式的值賦給其左邊的變量。n 例如:a=10;x=a+5;前者是把常量 10賦給變量a,后者是將表達(dá)式a+5的值賦給變量x。n 注意:如果“=”兩側(cè)的類型不一致,在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。例如:a=b;執(zhí)行該語句時(shí)

17、,b 的結(jié)果轉(zhuǎn)換為a的類型后才能進(jìn)行賦值運(yùn)算。n 2.2.復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符n C語言允許在賦值運(yùn)算符“=”之前加上其他運(yùn)算符,以構(gòu)成其復(fù)合運(yùn)算符。復(fù)合運(yùn)算符多數(shù)為雙目。在 C語言中,可以使用的復(fù)合賦值運(yùn)算符有:n + =,- =,* =,/ =,% =, =,& =,=, =n a+=2 等價(jià)于 a=a+2n x*=y+5 等價(jià)于 x=x*(y+5)n x%=8 等價(jià)于 x=x%8n 賦值運(yùn)算符都是自右向左執(zhí)行的。C語言采用復(fù)合運(yùn)算符,一是為了簡(jiǎn)化程序,使程序精練,二是為了提高編譯效率。n 3.3.賦值表達(dá)式賦值表達(dá)式n 賦值表達(dá)式的一般形式為n 變量賦值運(yùn)算符表達(dá)式n 它

18、的功能是將賦值運(yùn)算符右邊的“表達(dá)式”的值賦給左邊的變量。注:賦值表達(dá)式左邊必須為變量,例如:n 下面的表達(dá)式均為賦值表達(dá)式。n b=4,b的值為4。n e=f=-2 等價(jià)于 e=(f=-2),其值為-2。n a=(10+20)%8/3 的值為2。n x=(y=10)/(d=2)的值為5。n 賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符,例如:n 如果a=10,表達(dá)式a+=a-=a*a的值為-180。其求解步驟為:n (1)先進(jìn)行a-=a*a的計(jì)算,n 它相當(dāng)于a=a-a*a=10-10*10=-90。n (2)再進(jìn)行a+=-90的計(jì)算,n 它相當(dāng)于a=a+(-90)=-90-90=-180。n 4.4

19、.自增自減運(yùn)算符自增自減運(yùn)算符n 增1運(yùn)算符(+)和減1運(yùn)算符(-)是 C語言中兩個(gè)較為獨(dú)特的單目運(yùn)算符。它既可以在操作數(shù)前,也可以在操作數(shù)后,其操作對(duì)象只能是變量,不能是常量或表達(dá)式。n 自增自減運(yùn)算符的作用是將操作對(duì)象的值增加1或減去1。n 雖然自增自減運(yùn)算符既可用于前綴運(yùn)算,也可用于后綴運(yùn)算,但其意義不同。例如:n i+,i- 表示在使用i值之后將i值加(減)1n +i,-I 表示在使用i值之前將i值加(減)1n 若i=5,則:n x=+i; i=i+1=5+1=6,x=i=6 n x=i+; x=i=5,i=i+1=5+1=6n 例如:i=2,則:n j=+i; i的值先變?yōu)?,再賦給

20、j,j的值為3n j=i+; 先將i的值2賦給j,j的值為2,然后i變?yōu)? n j=-i; i的值先變?yōu)?,再賦給j,j的值為1n j=i-; 先將i的值2賦給j,j的值為2,然后i變?yōu)?n 若i=3,則:n (i+)+(i+)+(i+)=9,相當(dāng)于3+3+3=9;n (+i)+(+i)+(+i)=18,相當(dāng)于6+6+6=18。n 說明:n (1)+和-僅適用于變量,不能用于常量或表達(dá)式。n (2)+和-運(yùn)算符的結(jié)合方向是“自右向左”。n 例如: n main()n n int a=100;n printf(a+=%dn,a+); n printf(+a=%dn,+a);n printf(a-

21、=%dn,a-);n printf(-a=%dn,-a);n n 輸出結(jié)果: n a+=100n +a=102n a-=102n -a=100n2.6.3 2.6.3 關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式n 1.1.關(guān)系運(yùn)算符關(guān)系運(yùn)算符n 關(guān)系運(yùn)算符均為二目運(yùn)算符,共有以下6種: n 大于 n = 大于等于 n y,a+b100為合法的關(guān)系表達(dá)式n 例如:a+by為“真”時(shí),其表達(dá)式的值為1;當(dāng)xy為“假”時(shí),其表達(dá)式的值為0。n 可以將關(guān)系表達(dá)式的運(yùn)算結(jié)果(0或1)賦給一個(gè)整型變量或字符型變量,如:a=4,b=1,下面的賦值語句將1賦給變量c:n c=ab;c的值為1;n 若a=1,

22、b=8,x=ab;x的值為0。 n2.6.4 2.6.4 邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式 n 1.1.邏輯運(yùn)算符邏輯運(yùn)算符n 邏輯運(yùn)算符有“&”(邏輯與)、“ ”(邏輯或)和“!”(邏輯非)三種。其中“&”和“ ”為二目運(yùn)算符,并為右結(jié)合方向;n“!”為單目運(yùn)算符,僅對(duì)其右邊的對(duì)象進(jìn)行邏輯求反運(yùn)算。邏輯運(yùn)算符中的“&”和“ ”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。如圖2.3所示。 !(非) (高) 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 &和 賦值運(yùn)算符 (低) 圖2.3 各種運(yùn)算的優(yōu)先級(jí) 邏輯運(yùn)算符的操作對(duì)象為零或非零整數(shù)值,其運(yùn)算規(guī)則見表2.4. 表2.4 邏

23、輯運(yùn)算規(guī)則 數(shù)據(jù)a 數(shù)據(jù)b a&b a b !a !b T T T T F F T F F T F T F T F T T F F F F F T T 2.2.邏輯表達(dá)式邏輯表達(dá)式 由邏輯運(yùn)算符和其操作對(duì)象組成的表達(dá)式稱為邏輯表達(dá)式。n 例如:n a&b,!c,(a+b)&(c=0) 均為邏輯表達(dá)式。 n2.6.5 2.6.5 位運(yùn)算符位運(yùn)算符n 位(bit)運(yùn)算是C語言的一大特色,可直接對(duì)構(gòu)成內(nèi)存的基本單位“字節(jié)”(byte)進(jìn)行按位操作。位運(yùn)算符共有6個(gè),分別為: &、 、。這些運(yùn)算符除外,均為二目運(yùn)算符,即要求運(yùn)算符的兩側(cè)各有一個(gè)運(yùn)算量,且運(yùn)算量只能是整型

24、或字符型。n 1.1.按位與(按位與(& &)n 操作規(guī)則: 參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的位均為1,則該位的結(jié)果為1,否則為0,見表2.5。表2.5 按位與按位與運(yùn)算量1 0 1 0 1運(yùn)算量2 0 0 1 1 結(jié)果 0 0 0 1 n 例如:(1) (2) (3) (4)n 01000001 01000001 01000001 01000001 n & 01000010 & 00000000 & 11111111 & 10001110 n 01000000 00000000 01000001 00000000 n 例如: 按位與的主要用

25、途為:n (1 1)清零。)清零。要將一個(gè)運(yùn)算量的每個(gè)位清為零,n 即00000000,只要找一個(gè)運(yùn)算量,其中相應(yīng)于原量為1的每位均為0,則這兩個(gè)運(yùn)算量按位與的結(jié)果為00000000。n (2 2)取一個(gè)數(shù)中的某些位。)取一個(gè)數(shù)中的某些位。如要取一個(gè)整數(shù)中的低字節(jié),只要將它與255,n 即十六進(jìn)制的00FF、二進(jìn)制的0000000011111111按位與即可。如: 00101101 10011100 n & 00000000 11111111n 00000000 10011100 n 這樣就將其高字節(jié)清零了。n 若要取其中的高字節(jié),可將其與65280,即十六進(jìn)制的FF00、二進(jìn)制的11

26、11111100000000按位與即可。如: n 00101101 10011100 n & 11111111 00000000n 0101101 00000000 n 2.2.按位或(按位或( )n 操作規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算量,其相應(yīng)的位中只要有一個(gè)為1,則該位的結(jié)果為1,否則為0,見表2.6。運(yùn)算量1 0 1 0 1運(yùn)算量2 0 0 1 1 結(jié)果 0 1 1 1 表2.6 按位或按位或n 例如: (1) (2) (3) (4)n 01000001 01000001 01000011 01000001 n 00101001 00000000 11111111 10111110 n

27、 01101001 01000001 11111111 11111111 n 按位或常用來對(duì)一個(gè)數(shù)的某些位置為1。一個(gè)整數(shù)a,要將其低字節(jié)全置為1,即低字節(jié)為11111111,可將該數(shù)與255(十六進(jìn)制為FF,二進(jìn)制為11111111)按位或即可。如:n 00110010 01001010 n 00000000 11111111n 00110010 11111111 n 3.3.按位異或(按位異或()n 操作規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算量,當(dāng)相應(yīng)位相同時(shí),其結(jié)果在該位為0,相應(yīng)位不同時(shí),其結(jié)果在該位為1,即按位相加,但不進(jìn)位,見表2.7。n 例如: (1) (2) (3) (4)n 0100001

28、1 01000011 01000011 01000011 n 00100101 00000000 11111111 01000011 n 01100110 01000011 10111100 00000000 n按位異或的主要用途為:n (1 1)使指定位翻轉(zhuǎn)。)使指定位翻轉(zhuǎn)。即由1變?yōu)?,由0變?yōu)?。n 如:要對(duì)011100110的低4位翻轉(zhuǎn),將其與00001111按位異或即可。 01100110 n 00001111n 01101001 運(yùn)算量1 0 1 0 1運(yùn)算量2 0 0 1 1 結(jié)果 0 1 1 0 表2.7 按位異或按位異或n 即與之進(jìn)行異或運(yùn)算的量的相應(yīng)位為 1即可。再如,要翻

29、轉(zhuǎn)一個(gè)整型量a的中間8位,可將其與0000111111110000按位異或,即a(0FF0),0FF0為二進(jìn)制數(shù)0000111111110000的十六進(jìn)制表示。n (2 2)不使用臨時(shí)變量,交換兩個(gè)值。)不使用臨時(shí)變量,交換兩個(gè)值。方法為:若有兩個(gè)數(shù)a和b,通過下面的賦值語句可將a和b的值互換: n a=ab; n b=ba; n a=ab;n 例如:a=3,b=4 n (3 3)與)與0 0相相,保留原值。,保留原值。n 例如:012000=012 a=011 b=100 a=111 b=100 b=011 a=111 a=100n 00001010 n 00000000n 00001010

30、 n 4.4.按位求反()按位求反()n 操作規(guī)則操作規(guī)則: : 運(yùn)算符是一個(gè)單目運(yùn)算符,用來對(duì)一個(gè)數(shù)的二進(jìn)制表示按位求反,即將0變成1,將1變成0,見表2.8。n 例如: (1) (2) (3)n 01101001 00000000 11111111n 10010110 11111111 00000000 n 將一個(gè)數(shù)的某些位變?yōu)?。方法是:將該數(shù)a與b按位求與,此處的b為這樣的一個(gè)數(shù),即要求a中變?yōu)?的那些位均為1,其余位均為0。運(yùn)算量 0 1 結(jié)果 1 0 表2.8 按位求反按位求反n 如要將a的最低位變?yōu)?,則可使用下述表達(dá)式實(shí)現(xiàn)。 n a=a&1n 5.5.左移(左移()n

31、操作規(guī)則操作規(guī)則: : 將一個(gè)數(shù)的各二進(jìn)制位全部左移若干位,左移后,右邊的這些位用0填補(bǔ),左邊移出的位舍棄不用。n 例如:a=a2;n 若 a=15,即二進(jìn)制00001111,左移兩位后變?yōu)?0111100。若再向左移4位,則變?yōu)?1000000。n 將一個(gè)數(shù)左移1位,相當(dāng)于該數(shù)乘以 2,左移2位相當(dāng)于該數(shù)乘以4。如上例中 a=15,則a=a)n 操作規(guī)則操作規(guī)則: :n 將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位,右移后,右邊移出的位被舍棄,而左邊的填補(bǔ)分兩種情況:n (1)該數(shù)為無符號(hào)數(shù),則高位補(bǔ)0。n 例如:a=a2;n 若a=15,二進(jìn)制為00001111,右移2位后為00000011。n (

32、2)該數(shù)為有符號(hào)數(shù),若原來的符號(hào)位為 0(最高位為0,即正數(shù)),則高位補(bǔ)0,如上例所示。若原來的符號(hào)位為1(即表示該數(shù)為負(fù)數(shù)),高位補(bǔ)0或1,取決于所使用的計(jì)算機(jī)系統(tǒng).有的系統(tǒng)補(bǔ)0,稱為邏輯右移,有的系統(tǒng)補(bǔ)1,稱為算術(shù)右移。n 例如:a:1000110110000111 n a1:0100011011000011(邏輯右移)n a1:1100011011000011(算術(shù)右移)n 最后再看一個(gè)綜合性例子。n 例如:編寫一函數(shù)mid(x,p,n),取出變量x中從第p位開始向左的n位。設(shè)x的最右端的位為第0位。 n mid(x,p,n)n unsigned x,p,n;n n return(xp)

33、&(0b?a:b;n 該表達(dá)式表示:如果a大于b,則將a賦給z,否則將b賦給z,即z為a與b中值較大者。n 說明:n (1)條件運(yùn)算符優(yōu)先級(jí)別高于賦值運(yùn)算符,低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。n (2)條件運(yùn)算符結(jié)合方向是“自右至左”。n (3)表達(dá)式1與表達(dá)式2、表達(dá)式3的類型可以不同。n 3.sizeof3.sizeof運(yùn)算符運(yùn)算符n sizeof運(yùn)算符是測(cè)試變量、表達(dá)式或類型名所占用的字節(jié)數(shù)。有兩種用法: n sizeof表達(dá)式:測(cè)試表達(dá)式所占用的字節(jié)數(shù)。 n sizeof類型名:測(cè)試類型名所占用的字節(jié)數(shù)。n 例如:sizeof(float)其值為4。n sizeof運(yùn)算符可以出現(xiàn)在表

34、達(dá)式中。 n main()n n int a=4;n float b=5.6;n printf(%d,%d,%dn,sizeof(a),sizeof(b),sizeof(double);n n 輸出結(jié)果: 2,4,8n 4.4.指針運(yùn)算符指針運(yùn)算符n 指針變量是專門用來存放變量所在地址的。與指針變量有關(guān)的運(yùn)算符有兩個(gè),即&和*。&是求變量的地址; *是求指針變量所指向的變量的值,即訪問目標(biāo)變量的值。n 如:int x,y,*p;/ *這里的 * 并不是運(yùn)算符,只是一個(gè)標(biāo)識(shí)*/ n n p=&x;/*表示把變量x的地址賦給指針變量p */n y= * p;/ *將指針變量

35、p所指向的變量x的值賦給變量y */n 注意:&只能用于變量或數(shù)組元素,&(a+b)和&5都是非法的。n 5.5.分量運(yùn)算符分量運(yùn)算符n 在訪問結(jié)構(gòu)體或共用體成員時(shí)需使用的兩個(gè)運(yùn)算符.和-,其中.的功能為引用指定容器中的對(duì)象,運(yùn)算符優(yōu)先級(jí)別最高;-通常使用在結(jié)構(gòu)體類型的指針變量,當(dāng)引用指針變量的成員時(shí),指針變量名-成員名,相當(dāng)于(指針變量).成員名。這兩個(gè)運(yùn)算符的詳細(xì)用法見第10章結(jié)構(gòu)體與共用體。n 6.6.下標(biāo)運(yùn)算符下標(biāo)運(yùn)算符n 稱為下標(biāo)運(yùn)算符,它主要應(yīng)用在數(shù)組元素的引用上,執(zhí)行時(shí)具體的操作過程為: 首先將數(shù)組的首地址與下標(biāo)中的數(shù)值相加,得到引用的數(shù)組元素的地址,然后

36、將此地址中的目標(biāo)訪問出來。n 例如:定義整型數(shù)組n int a5;/* 這里的只是標(biāo)識(shí)符,并非運(yùn)算符 */n 當(dāng)在程序執(zhí)行過程中,引用數(shù)組元素a2其執(zhí)行過程為: 首先將數(shù)組的首地址a與2*2相加得到一個(gè)地址值,然后再將這個(gè)地址中的數(shù)值取出來,即數(shù)組元素的值。n 在內(nèi)存中,字符是以系統(tǒng)中所使用字符的編碼值形式存儲(chǔ)的。C 語言允許字符型數(shù)據(jù)和整型數(shù)據(jù)之間通用一個(gè)字符型數(shù)據(jù),既可以以字符形式輸出,也可以以整數(shù)形式輸出。 n 同時(shí),字符型數(shù)據(jù)可以賦給整型變量,整型數(shù)據(jù)也可以賦給字符型變量,只是當(dāng)整型變量數(shù)據(jù)的大小超過字符型變量的表示范圍時(shí),需要截取相應(yīng)的有效位。n 除字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用之

37、外,不同類型的數(shù)據(jù)在進(jìn)行混合運(yùn)算時(shí),往往需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。n2.7.1 2.7.1 自動(dòng)類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換n C語言允許在整型、單精度浮點(diǎn)型數(shù)據(jù)之間進(jìn)行混合運(yùn)算,在進(jìn)行運(yùn)算時(shí),首先將不同類型的數(shù)據(jù)轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換規(guī)則如圖2.4所示。n doublefloatn n longn n unsignedn n intchar,short (高) (低)圖圖2.4 2.4 不同類型數(shù)據(jù)轉(zhuǎn)換規(guī)則不同類型數(shù)據(jù)轉(zhuǎn)換規(guī)則n 兩種箭頭表示兩種含義兩種箭頭表示兩種含義: : 向左的橫向箭頭,表示即使在同一種數(shù)據(jù)類型進(jìn)行運(yùn)算時(shí),也要進(jìn)行轉(zhuǎn)換,用于提高計(jì)算精度.而向上的縱向箭頭,表示當(dāng)運(yùn)算對(duì)象類型不同時(shí)的轉(zhuǎn)換方向。由于字符型數(shù)據(jù)可以和整型數(shù)據(jù)通用,則下列表達(dá)式是合法的: n 有 200+B+8.65*38n 在進(jìn)行混合運(yùn)算時(shí),不同類型的數(shù)據(jù)首先要轉(zhuǎn)換成同一類型,然后才能進(jìn)行運(yùn)算,而這種轉(zhuǎn)換最終轉(zhuǎn)化成整數(shù)和浮點(diǎn)數(shù)之間轉(zhuǎn)換的問題,自動(dòng)轉(zhuǎn)換規(guī)則為:n (1)當(dāng)單、雙精度浮點(diǎn)型數(shù)據(jù)賦給整型變量時(shí),浮點(diǎn)數(shù)的小數(shù)部分將被舍棄。n (2)當(dāng)整型數(shù)據(jù)賦給浮點(diǎn)型變量時(shí),數(shù)值上不發(fā)生任何變化,但有效位增加。n (3)如果算術(shù)運(yùn)算符兩個(gè)運(yùn)算對(duì)象都為整數(shù),那么,運(yùn)算

溫馨提示

  • 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)論