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

下載本文檔

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

文檔簡介

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

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

3、規(guī)則相同。n 1.1.變量的有關(guān)規(guī)定變量的有關(guān)規(guī)定n (1)使用變量前,必須先定義,否則不能作為變量來使用.n (2)每一個變量屬于一種類型,便于在編譯時為其分配相應(yīng)的存儲單元并據(jù)此檢查該變量所進行的運算是否合法。n2.2.1 2.2.1 整型常量整型常量n 整型常量有三種表示方法:n (1 1)十進制整數(shù))十進制整數(shù): :如1236,-234,0。n (2 2)八進制整數(shù))八進制整數(shù): :以0開頭的數(shù)是八進制數(shù)。如 011表示八進制數(shù)的n (3 3)十六進制整數(shù))十六進制整數(shù): :以0 x開頭的數(shù)是十六進制數(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: 以十進制格式符輸出 */n printf(%o,%o,%on,x,y,z); n /*%o: 以八進制格式符輸出 */n printf(%x,%x,%xn,x,y,z); n /*%x: 以十六進制格式符輸出 */n n2.2.2 2.2.2 整型變量整型變量n 整型變量可用來存放整型數(shù)據(jù)(即不帶小數(shù)點的數(shù))。整型變量可以分為:基本型、短整型、長整型和無符號整型4種類型,其定義的關(guān)鍵字如下:n (1)基本型:用int表示;n (2)短整型:用short int或short表示;n (3)長整

5、型:用long int或long表示;n (4)無符號整型: 無符號整型無符號整型: : 用unsigned int或unsigned表示; 無符號短整型無符號短整型: :用unsigned short int或unsigned short表示; 無符號長整型無符號長整型: :用unsigned long int或unsigned long表示。n 以一個機器字(word)存放一個int 型數(shù)據(jù),而long整型數(shù)據(jù)的字節(jié)數(shù)應(yīng)不小于int型,而short型應(yīng)不長于int型。n 以PC機為例,整型變量數(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 實型常量實型常量n 在C語言中,把帶小數(shù)的數(shù)稱為實數(shù)或浮點數(shù)。n 1.1.十進制數(shù)形式十進制數(shù)形式n 它是由數(shù)字和小數(shù)點組成,如3.14159,-7.2,8.9等都是十進制形式。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 字符型常量是由一對單引號括起來的單個字符構(gòu)成,例如,nA,b,

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

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

10、n字符型數(shù)據(jù)與整型數(shù)據(jù)可以通用,且字符型數(shù)據(jù)可以進行算術(shù)運算。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對應(yīng)的字符 */n printf(%d,%dn,c1,c2); n /* 輸出c1,c2對應(yīng)字符的ASCII碼值 */n n C:a4 n 運行結(jié)果為 n A,B n 65,66n 2.4.3 2.4.3 字符串常量字符串常量n 字符串常量是由一對

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

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

13、har d;n float f;n a=2; 圖圖2.2 2.2 字符串的存儲形式字符串的存儲形式 CHINA 0n b=5;n c=10;n d=a;n f=5.7;n 2.2.定義和賦值同時進行定義和賦值同時進行 n int a=5;n short b=10;n char c=a;n float d=7.8;n 3.3.對幾個變量同時賦一個初值對幾個變量同時賦一個初值 n int a1=10,a2=10,a3=10;n 初始化不是在編譯階段完成的,而是在程序運行時執(zhí)行本函數(shù)時賦以初值的。相當(dāng)于一個賦值語句。例如: 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語言的運算符非常豐富,使用方法也非常靈活,這是C語言的主要特點。C語言具有 44種運算符,其中一部分與其他高級語言相同,而另外一部分與匯編語言相似。n 運算符與運算對象(常量、變量、函數(shù)、表達式)組合起來,構(gòu)成不同類型的表達式。C 語言的運算符有不同的優(yōu)先級和結(jié)合方向規(guī)則。如附錄所示,優(yōu)先級是按由高到低的順序排列的。n C 語言運算符可以分為: 算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、賦值運算符等幾類; 若從其在表達式中與運算對象的關(guān)系上分,可分為單目運算符、雙目運算符和三目運算符。n2.6.

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

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

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

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

19、.自增自減運算符自增自減運算符n 增1運算符(+)和減1運算符(-)是 C語言中兩個較為獨特的單目運算符。它既可以在操作數(shù)前,也可以在操作數(shù)后,其操作對象只能是變量,不能是常量或表達式。n 自增自減運算符的作用是將操作對象的值增加1或減去1。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)+和-僅適用于變量,不能用于常量或表達式。n (2)+和-運算符的結(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)系運算符和關(guān)系表達式關(guān)系運算符和關(guān)系表達式n 1.1.關(guān)系運算符關(guān)系運算符n 關(guān)系運算符均為二目運算符,共有以下6種: n 大于 n = 大于等于 n y,a+b100為合法的關(guān)系表達式n 例如:a+by為“真”時,其表達式的值為1;當(dāng)xy為“假”時,其表達式的值為0。n 可以將關(guān)系表達式的運算結(jié)果(0或1)賦給一個整型變量或字符型變量,如: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 邏輯運算符和邏輯表達式邏輯運算符和邏輯表達式 n 1.1.邏輯運算符邏輯運算符n 邏輯運算符有“&”(邏輯與)、“ ”(邏輯或)和“!”(邏輯非)三種。其中“&”和“ ”為二目運算符,并為右結(jié)合方向;n“!”為單目運算符,僅對其右邊的對象進行邏輯求反運算。邏輯運算符中的“&”和“ ”低于關(guān)系運算符,“!”高于算術(shù)運算符。如圖2.3所示。 !(非) (高) 算術(shù)運算符 關(guān)系運算符 &和 賦值運算符 (低) 圖2.3 各種運算的優(yōu)先級 邏輯運算符的操作對象為零或非零整數(shù)值,其運算規(guī)則見表2.4. 表2.4 邏

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

24、或字符型。n 1.1.按位與(按位與(& &)n 操作規(guī)則: 參加運算的兩個運算量,如果兩個相應(yīng)的位均為1,則該位的結(jié)果為1,否則為0,見表2.5。表2.5 按位與按位與運算量1 0 1 0 1運算量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)清零。)清零。要將一個運算量的每個位清為零,n 即00000000,只要找一個運算量,其中相應(yīng)于原量為1的每位均為0,則這兩個運算量按位與的結(jié)果為00000000。n (2 2)取一個數(shù)中的某些位。)取一個數(shù)中的某些位。如要取一個整數(shù)中的低字節(jié),只要將它與255,n 即十六進制的00FF、二進制的0000000011111111按位與即可。如: 00101101 10011100 n & 00000000 11111111n 00000000 10011100 n 這樣就將其高字節(jié)清零了。n 若要取其中的高字節(jié),可將其與65280,即十六進制的FF00、二進制的11

26、11111100000000按位與即可。如: n 00101101 10011100 n & 11111111 00000000n 0101101 00000000 n 2.2.按位或(按位或( )n 操作規(guī)則:參加運算的兩個運算量,其相應(yīng)的位中只要有一個為1,則該位的結(jié)果為1,否則為0,見表2.6。運算量1 0 1 0 1運算量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 按位或常用來對一個數(shù)的某些位置為1。一個整數(shù)a,要將其低字節(jié)全置為1,即低字節(jié)為11111111,可將該數(shù)與255(十六進制為FF,二進制為11111111)按位或即可。如:n 00110010 01001010 n 00000000 11111111n 00110010 11111111 n 3.3.按位異或(按位異或()n 操作規(guī)則:參加運算的兩個運算量,當(dāng)相應(yīng)位相同時,其結(jié)果在該位為0,相應(yīng)位不同時,其結(jié)果在該位為1,即按位相加,但不進位,見表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 如:要對011100110的低4位翻轉(zhuǎn),將其與00001111按位異或即可。 01100110 n 00001111n 01101001 運算量1 0 1 0 1運算量2 0 0 1 1 結(jié)果 0 1 1 0 表2.7 按位異或按位異或n 即與之進行異或運算的量的相應(yīng)位為 1即可。再如,要翻

29、轉(zhuǎn)一個整型量a的中間8位,可將其與0000111111110000按位異或,即a(0FF0),0FF0為二進制數(shù)0000111111110000的十六進制表示。n (2 2)不使用臨時變量,交換兩個值。)不使用臨時變量,交換兩個值。方法為:若有兩個數(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ī)則: : 運算符是一個單目運算符,用來對一個數(shù)的二進制表示按位求反,即將0變成1,將1變成0,見表2.8。n 例如: (1) (2) (3)n 01101001 00000000 11111111n 10010110 11111111 00000000 n 將一個數(shù)的某些位變?yōu)?。方法是:將該數(shù)a與b按位求與,此處的b為這樣的一個數(shù),即要求a中變?yōu)?的那些位均為1,其余位均為0。運算量 0 1 結(jié)果 1 0 表2.8 按位求反按位求反n 如要將a的最低位變?yōu)?,則可使用下述表達式實現(xiàn)。 n a=a&1n 5.5.左移(左移()n

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

32、2)該數(shù)為有符號數(shù),若原來的符號位為 0(最高位為0,即正數(shù)),則高位補0,如上例所示。若原來的符號位為1(即表示該數(shù)為負數(shù)),高位補0或1,取決于所使用的計算機系統(tǒng).有的系統(tǒng)補0,稱為邏輯右移,有的系統(tǒng)補1,稱為算術(shù)右移。n 例如:a:1000110110000111 n a1:0100011011000011(邏輯右移)n a1:1100011011000011(算術(shù)右移)n 最后再看一個綜合性例子。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 該表達式表示:如果a大于b,則將a賦給z,否則將b賦給z,即z為a與b中值較大者。n 說明:n (1)條件運算符優(yōu)先級別高于賦值運算符,低于關(guān)系運算符和算術(shù)運算符。n (2)條件運算符結(jié)合方向是“自右至左”。n (3)表達式1與表達式2、表達式3的類型可以不同。n 3.sizeof3.sizeof運算符運算符n sizeof運算符是測試變量、表達式或類型名所占用的字節(jié)數(shù)。有兩種用法: n sizeof表達式:測試表達式所占用的字節(jié)數(shù)。 n sizeof類型名:測試類型名所占用的字節(jié)數(shù)。n 例如:sizeof(float)其值為4。n sizeof運算符可以出現(xiàn)在表

34、達式中。 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.指針運算符指針運算符n 指針變量是專門用來存放變量所在地址的。與指針變量有關(guān)的運算符有兩個,即&和*。&是求變量的地址; *是求指針變量所指向的變量的值,即訪問目標(biāo)變量的值。n 如:int x,y,*p;/ *這里的 * 并不是運算符,只是一個標(biāo)識*/ n n p=&x;/*表示把變量x的地址賦給指針變量p */n y= * p;/ *將指針變量

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

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

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論