版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第2章數(shù)據(jù)類型和表達(dá)式2.1詞法構(gòu)成2.2數(shù)據(jù)類型2.3常量與變量2.4指針類型2.5運算符和表達(dá)式2.6小結(jié)第2章數(shù)據(jù)類型和表達(dá)式2.1詞法構(gòu)成字符集標(biāo)識符關(guān)鍵字注釋符字符集C語言的字符集是ASCII字符集的一個子集,由字母,數(shù)字,標(biāo)點符號和特殊字符構(gòu)成。(1)英文字母:a~z,A~Z(2)數(shù)字:0~9(3)空白符:空格符,制表符,換行符等統(tǒng)稱為空白符。(4)特殊字符:①標(biāo)點符號②轉(zhuǎn)義字符字符集表2.1常用轉(zhuǎn)義字符表名稱符號名稱符號空字符(null)\0換行(newline)\n換頁(formfeed)\f回車(carriagereturn)\r退格(backspace)\b響鈴(bell)\a水平制表(horizontaltab)\t垂直制表(verticaltab)\v反斜線(backslash)\\問號(questionmark)\?單引號(singlequotationmarks)\'雙引號(doublequotationmarks)\”1到3位8進(jìn)制數(shù)所代表的字符\ddd1到2位16進(jìn)制數(shù)所代表的字符\xhh標(biāo)識符C語言規(guī)定,標(biāo)識符只能是字母(A~Z,a~z)、數(shù)字(0~9)、下劃線(_)組成的字符串,并且第一個字符必須是字母或下劃線。注意(1)C語言中標(biāo)識符嚴(yán)格區(qū)分大小寫
(2)ANSIC標(biāo)準(zhǔn)規(guī)定標(biāo)識符的長度可達(dá)31個字符
(3)標(biāo)識符命名應(yīng)“見名知義”; (4)變量名都要“先定義,后使用”。關(guān)鍵字ANSIC定義的關(guān)鍵字共32個,根據(jù)關(guān)鍵字的作用,可將其分為數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲類型關(guān)鍵字和其它關(guān)鍵字四類MicrosoftC在ANSIC基礎(chǔ)上擴(kuò)展的關(guān)鍵字有(19個)注釋符C語言的注釋符是以“/*”開頭,并以“*/”結(jié)尾,其間的內(nèi)容為注釋,一般出現(xiàn)在程序語句行之后,用來幫助閱讀程序。數(shù)據(jù)類型基本類型構(gòu)造類型指針類型(
)空類型(void)字符型(char)枚舉類型(enum)數(shù)組類型([])結(jié)構(gòu)體類型(struct)共用體類型(union)整型實型單精度型(float)雙精度型(double)2.2數(shù)據(jù)類型基本整型長整型短整型無符號整型整數(shù)類型 整型數(shù)就是通常使用的整數(shù),分為帶符號整數(shù)和無符號整數(shù)兩大類。 1.基本類型定義
類型說明符:int例如,inta,b,c; 說明變量a,b,c被同時定義為基本整型數(shù)據(jù)類型。整數(shù)類型 2.整型數(shù)據(jù)的存儲與取值范圍表2.2VisualC++6.0環(huán)境中整型數(shù)據(jù)屬性表數(shù)據(jù)類型占用字節(jié)數(shù)二進(jìn)制位長度值域int432-2147483648~2147483647short[int]216-32768~32767long[int]432-2147483648~2147483647[signed]int216同int[signed]short[int]216同short[signed]long[int]432同longunsigned[int]2160~65535unsignedshort[int]216同unsignedintunsignedlong[int]4320~4294967295整數(shù)類型3.整型數(shù)據(jù)的表示形式十進(jìn)制整數(shù):254,-127,0都是正確的,而0291(不能有前導(dǎo)0)、23D(含有非十進(jìn)制數(shù)碼)都是非法的;八進(jìn)制整數(shù):021,-017都是正確的,它們分別代表十進(jìn)制整數(shù)17,-15,而256(無前綴0)、03A2(包含了非八進(jìn)制數(shù)碼)是非法的;十六進(jìn)制整數(shù):0x12,-0x1F都是正確的,它們分別代表十進(jìn)制整數(shù)18,31,而5A(無前綴0x)、0x3H(含有非十六進(jìn)制數(shù)碼)是非法的。實數(shù)類型
1.基本類型定義類型說明符:float(單精度型),double(雙精度型),longdouble(長雙精度型) 2.實數(shù)存儲與取值范圍 在計算機(jī)中,實數(shù)是以浮點數(shù)形式存儲的,所以通常將單精度實數(shù)稱為浮點數(shù)。例如單精度實型數(shù)據(jù)在計算機(jī)中的存放形式見圖2.1所示。其中,小數(shù)部分一般都采用規(guī)格化的數(shù)據(jù)形式。
圖2.1單精度實型數(shù)據(jù)在計算機(jī)中的存放形式1位7位1位23位階符階碼數(shù)符尾數(shù)指數(shù)部分小數(shù)部分實數(shù)類型表2.3MicroSoftC中實型數(shù)據(jù)屬性表數(shù)據(jù)類型比特數(shù)(字節(jié)數(shù))有效數(shù)字?jǐn)?shù)的范圍float32(4)6~7|-3.4E-38~3.4E+38|double64(8)15~16|-1.7E-308~1.7E+308|longdouble64(8)18~19|-1.7E-308~1.7E+308|實數(shù)類型 3.浮點數(shù)的表示形式 在C語言中,實數(shù)表示只采用十進(jìn)制。它有二種形式:十進(jìn)制數(shù)形式和指數(shù)形式。(1)十進(jìn)制數(shù)形式。由整數(shù)、小數(shù)部分和小數(shù)點組成,整數(shù)和小數(shù)都是十進(jìn)制形式。例如,0.123,-125.46,.78,80.0等都是合法形式。(2)指數(shù)形式。由尾數(shù)、指數(shù)符號e或E和指數(shù)組成,尾數(shù)是小數(shù)點左邊有且只有一位非零數(shù)字的實數(shù)。e或E前面必須有數(shù)字,e或E后面必須是整數(shù)。指數(shù)形式用于表示較大或者較小的實數(shù)。字符類型 1.基本類型定義
類型說明符:char 2.字符型數(shù)據(jù)存儲與取值范圍 字符型數(shù)據(jù)的取值范圍:ASCII碼字符集中的可打印字符。字符數(shù)據(jù)存儲占1個字節(jié),存儲時實際上存儲的是對應(yīng)字符的ASCII碼值(即一個整數(shù)值)。字符類型 3.字符型數(shù)據(jù)的表示方法字符型數(shù)據(jù)在計算機(jī)中存儲的是字符的ASCII碼值的二進(jìn)制形式,一個字符的存儲占用一個字節(jié)。因為ASCII碼形式上就是0到255之間的整數(shù),因此C語言中字符型數(shù)據(jù)和整型數(shù)據(jù)可以通用。字符類型字符數(shù)據(jù):指用單引號括起來的單個字符數(shù)據(jù),如'A','%',':','9'等。而'12'或'abc'是不合法的字符數(shù)據(jù)。字符串?dāng)?shù)據(jù):指用雙引號括起來的單個或一串字符數(shù)據(jù),如"good"、"0132"、"w1"、"a"等。注意"a"是字符串?dāng)?shù)據(jù)而不是字符數(shù)據(jù)。 為了便于C程序判斷字符串是否結(jié)束,系統(tǒng)對每個字符串?dāng)?shù)據(jù)存儲時都在末尾添加一個結(jié)束標(biāo)志——即ASCII碼值為0的空操作符'\0',它既不引起任何動作也不會顯示輸出,所以存儲一個字符串的字節(jié)數(shù)應(yīng)該是字符串的長度加1。字符類型例如"hello"在計算機(jī)中表示形式如圖2.3所示:'h''e''l''l''o''\0'1041011081081110圖2.3"hello"在計算機(jī)中的存儲示意圖2.3常量與變量2.3.1常量常量程序運行過程中不能被改變的量。整數(shù)在計算機(jī)中是準(zhǔn)確表示的,可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制數(shù)表示。當(dāng)用八進(jìn)制數(shù)表示時,第一位數(shù)字前面必須加0;當(dāng)用十六進(jìn)制數(shù)表示時,第一位數(shù)字前而必須加0x:無符號整數(shù)的末尾必須加字母u或U;長整數(shù)的末尾必須加字母I或L。字符型常數(shù)是用單引號括住的單個字符。用轉(zhuǎn)義字符表示不可顯示字符。轉(zhuǎn)義字符以“\”開頭,后跟一個特定的字母或八進(jìn)制數(shù)或十六進(jìn)制數(shù)表示的ASCII代碼值。2.3常量與變量符號常數(shù)是用標(biāo)識符表示的常數(shù),它具有變量的外表和常量的內(nèi)涵。用#define定義的符號常數(shù)沒有類型和值的含義。在預(yù)編譯時由編譯系統(tǒng)將宏名用宏體替換。define是編譯預(yù)處理命令,不屬于C語言關(guān)鍵字。用const定義的符號常數(shù)既有值又有類型的含義。該定義是在編譯階段完成的。2.3.2變量1.變量的有關(guān)概念在程序運行過程中,其值改變的數(shù)據(jù),稱為變量,變量用標(biāo)識符表示,稱為變量名。變量必須“先定義后使用”系統(tǒng)為變量分配存儲單元,存儲變量的值。編寫程序時通過變量名來存、取變量值。x98變量值為變量分配的存儲單元變量名例如:有變量x它的值是982.變量定義變量定義的一般格式:例如:inti,j;longk,m;floatx,y;charch1,ch2;必須使用合法的標(biāo)識符作變量名不能使用關(guān)鍵字為變量命名分號是語句的組成部分C語言的變量名和它的類型無關(guān);在函數(shù)或復(fù)合語句中必須把要定義的變量全部定義,即不允許在后面的執(zhí)行語句中插入變量的定義。
【類型修飾符】數(shù)據(jù)類型變量表;5.變量的初始化允許在說明變量的時候?qū)ψ兞抠x初值。例如:inta=5,b=10+2;doublex=23.568,y;charch1='a',ch2=66,ch3='\142';表示定義變量并對變量存儲單元賦值。錯誤的初始化:inta=3+b,b=5;floatm=n=23.16;5.變量的初始化(1)注意變量在賦值或運算時,其值要在該數(shù)據(jù)類型的值域內(nèi),否則會產(chǎn)生數(shù)據(jù)溢出。(2)由于實型變量是由有限的存儲單元組成的,因此能提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字將被舍去,由此可能會產(chǎn)生一些誤差。(3)字符型數(shù)據(jù)與整型數(shù)據(jù)可通用,增加了程序設(shè)計的自由度,例如對字符作多種轉(zhuǎn)換就比較方便。但也需注意,字符型數(shù)據(jù)與整型數(shù)據(jù)的通用是有條件的,即在0~255的范圍之內(nèi)才可以通用。5.變量的初始化【例2.1】整型數(shù)據(jù)的溢出。
#include"stdio.h" voidmain() {
shortinta,b; a=32767; b=a+1; printf("a:%d,b:%d",a,b); }
運行結(jié)果為: a:32767,b:-327685.變量的初始化【例2.2】實型數(shù)據(jù)的舍入誤差。
#include"stdio.h" voidmain() {floata,b,c,d; a=12345.6789e3; b=12345.6784e3; c=a+10;/*理論值應(yīng)是12345688.900000*/ d=b+10;/*理論值應(yīng)是12345688.400000*/ printf("c=%f\n",c);
/*實型變量只能保證的有效數(shù)字是7位有效數(shù)字,運行結(jié)果是理論結(jié)果四舍五入得到的*/
printf("d=%f\n",d);
}
運行結(jié)果 c=12345689.000000 d=12345688.0000005.變量的初始化【例2.3】計算字符'B'與整型數(shù)據(jù)20的和。
#include"stdio.h" voidmain() {chara;/*說明a為字符型變量*/ intb;/*說明b為整型變量*/ a='B';/*為a賦字符常量'B'*/ b=a+20;/*計算66+20并賦值給字符變量b*/ printf("%c,%d,%c,%d\n",a,a,b,b);/*分別以字符型和整型兩種格式輸出a、b*/} 程序運行的輸出結(jié)果如下: B,66,V,862.4指針和指針變量main(){floatx;inty;…}2.4.1指針和指針變量的概念變量的兩個物理意義200020012002200320042005…xy變量的內(nèi)容變量的地址2.4.1指針和指針變量的概念
voidmain(){inta,b,c;a=5;b=3;c=a
+b;…}200020012002200320042005abc5直接將整數(shù)
5
存入變量a3直接將整數(shù)
3
存入變量b8
直接將變量a、b
的值取出,相加后存入變量
c利用變量名存取數(shù)據(jù)的方式稱為“直接存取”方式。2.4.1指針和指針變量的概念
C語言還提供了對內(nèi)存單元的“間接存取”方式p20002001200220032004200520062007abc532004a和b相加的結(jié)果(*p=a+b)存放到變量p所指向的內(nèi)存單元中去。此時c稱為指針變量p的目標(biāo)變量。P2004cp=&c8voidmain(){inta=5,b=3,c,*p;
p=&c;*p=a+b;…}●變量的地址稱為變量的指針●存放地址的變量稱為指針變量2.4.2指針變量的定義
voidmain(){inta,*p=&a;floatx,*q=&x;…}2000200120022003200420052006200720082009apxq20042000
void
main(){inta,*p;floatx,*q;
p=&a;q=&x;…}指針變量定義的形式指針變量初始化2.4.2指針變量的定義 指針變量的引用 關(guān)于對指針變量的引用,通過上述已經(jīng)出現(xiàn)的兩個相關(guān)的運算符進(jìn)行說明。 (1)*:稱為指針運算符或稱為“間接訪問內(nèi)存地址”運算符;在定義時,通過它標(biāo)明某個變量被定義為指針變量,而在使用時,*p則表示p所指向變量的內(nèi)容。 (2)&:稱為取地址運算符,通過它獲得目標(biāo)變量所在存儲單元的地址。2.5運算符和表達(dá)式主要內(nèi)容:算術(shù)運算符和算術(shù)表達(dá)式賦值運算符和賦值表達(dá)式關(guān)系運算符和關(guān)系表達(dá)式邏輯運算符和邏輯表達(dá)式位運算符和位運算表達(dá)式條件運算符和條件表達(dá)式逗號運算符和逗號表達(dá)式其他運算符及其運算運算符的有關(guān)概念作用:對運算對象完成規(guī)定的操作運算類型:按運算對象分:單目、雙目、三目按功能分:算術(shù)、賦值、關(guān)系、邏輯條件、逗號、位、其他運算符的優(yōu)先級和結(jié)合性優(yōu)先級指各種運算符號的運算優(yōu)先順序例如:算術(shù)運算優(yōu)先于關(guān)系運算算術(shù)運算中先*/后+-結(jié)合性指運算符號和運算對象的結(jié)合方向分為:從左向右(左結(jié)合)和從右向左(右結(jié)合)例如:算術(shù)運算符為左結(jié)合a-b+4賦值運算符為右結(jié)合a=b=5運算符的優(yōu)先級和結(jié)合性表2.6
運算符優(yōu)先級和結(jié)合性優(yōu)先級運算符名稱操作數(shù)個數(shù)結(jié)合規(guī)則1()[]->﹒圓括號運算符數(shù)組下標(biāo)運算符指向結(jié)構(gòu)指針成員運算符取結(jié)構(gòu)成員運算符->(從左至右)2!~++---(類型)*&sizeof邏輯非運算符按位取反運算符自增運算符自減運算符負(fù)號運算符強(qiáng)制類型轉(zhuǎn)換運算符取地址的內(nèi)容(指針運算)取地址運算符求字節(jié)數(shù)運算符1(單目運算符)<-(從右至左)運算符的優(yōu)先級和結(jié)合性優(yōu)先級運算符名稱操作數(shù)個數(shù)結(jié)合規(guī)則3*/%乘法運算符除法運算符求余運算符2(雙目運算符)->4+-加法運算符減法運算符2(雙目運算符)->5<<>>左移運算符右移運算符2(雙目運算符)->6<<=>>=小于運算符小于等于運算符大于運算符大于等于運算符2(雙目運算符)->7==!=等于運算符不等于運算符2(雙目運算符)->運算符的優(yōu)先級和結(jié)合性優(yōu)先級運算符名稱操作數(shù)個數(shù)結(jié)合規(guī)則8&按位“與”運算符2(雙目運算符)->9^按位“異或”運算符2(雙目運算符)->10|按位“或”運算符2(雙目運算符)->11&&邏輯與運算符2(雙目運算符)->12||邏輯或運算符2(雙目運算符)->13?:條件運算符3(三目運算符)<-優(yōu)先級運算符名稱操作數(shù)個數(shù)結(jié)合規(guī)則14=+=-=*=/=%=>>=<<=&=^=|=賦值運算符2(雙目運算符)<-15,逗號運算符(順序求值運算符)->運算符的優(yōu)先級和結(jié)合性表達(dá)式的有關(guān)概念什么是表達(dá)式表達(dá)式由運算符和操作數(shù)組成,操作數(shù)是運算符的操作對象,可以是常量、變量、函數(shù)和表達(dá)式。表達(dá)式的書寫C語言的表達(dá)式采用線性形式書寫。數(shù)學(xué)表達(dá)式應(yīng)該寫成1/6-i+j*j*j*j*j*j。C語言的表達(dá)式只能使用C語言中合法的運算符和操作數(shù)2πr應(yīng)該寫成2*3.14159*r例如:表達(dá)式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=a>b>c--a||++b&&c++max=a>b?a:ba=3,a+=3,a*a 1/(float)a+6算術(shù)運算算術(shù)運算符的優(yōu)先級
()+-++--
*/%
+-
同級同級同級
單目雙目
高
低算術(shù)運算沒有乘方運算符,要計算a3要寫作a*a*a的連乘,或用標(biāo)準(zhǔn)庫函數(shù)pow(a,3)“/”的運算對象可為各種類型數(shù)據(jù),但是當(dāng)進(jìn)行兩個整型數(shù)據(jù)相除時,運算結(jié)果也是整型數(shù)據(jù)“%”要求運算對象必須是整型數(shù)據(jù),功能是求兩數(shù)相除的余數(shù),余數(shù)的符號與被除數(shù)的符號相同。自增自減運算++--是單目運算符有前綴和后綴兩種形式前綴形式:先自增(自減)再引用;后綴形式:先引用再自增(自減);功能:前綴形式++a等價于a=a+1
--
a等價于a=a–
1后綴形式a++等價于a=a+1
a--
等價于a=a–
1例如:當(dāng)a=5時⑴++a表達(dá)式的值為6,且
a=6⑵
a++表達(dá)式的值為5,且a=6⑶b=++a
等價于a=a+1;b=a表達(dá)式的值為6,且a=6,b=6⑷b=a++等價于b=a;a=a+1表達(dá)式的值為5,且a=6,b=5
說明:自增、自減運算符只能用于整型變量,而不能用于常量或表達(dá)式。例如:5++、(a+2)++不合法。具有右結(jié)合性,結(jié)合方向為從右到左。例如:
–a++
等價于-(a++)
C語言的表達(dá)式中“++”,“--”運算符,如果使用不當(dāng),很容易導(dǎo)致錯誤。例如:設(shè)i=3,表達(dá)式k=(++i)+(++i)+(++i)”不同的C編譯系統(tǒng)結(jié)合方式不一樣,所以不同的編譯系統(tǒng)中,針對上述表達(dá)式得出的答案并不一定同編程者的原意相同。說明:
【例2.6】自增自減運算的應(yīng)用。
#include“stdio.h” voidmain() {inti,j; i=j=5; printf(“i++=%d,j--=%d\n”,i++,j--); printf(“++i=%d,--j=%d\n”,++i,--j); printf(“i++=%d,j--=%d\n”,i++,j--); printf(“++i=%d,--j=%d\n”,++i,--j); printf(“i=%d,j=%d\n”,i,j);
}運行結(jié)果:i++=5,j--=5++i=7,--j=3i++=7,j--=3++i=9,--j=1i=9,j=1關(guān)系運算關(guān)系運算符(左結(jié)合)
>>=<<=
==!=較高較低關(guān)系表達(dá)式用關(guān)系運算符將運算對象連接成的式子例如:12<'C'+1(字符型數(shù)據(jù)比較ASCII值)a==b>=c等價于a==(b>=c)與(a==b)>=c不等價關(guān)系運算符優(yōu)先于賦值,低于算術(shù)說明:關(guān)系運算的結(jié)果應(yīng)該是邏輯值。C語言用數(shù)值用1表示邏輯真,0表示邏輯假例如:7>5的值是1,5>7的值是0
'a'>'b'的值是0,'a'<'b'的值是1即關(guān)系表達(dá)式的值:0或1實型數(shù)可進(jìn)行大于或小于比較,但通常不進(jìn)行==或!=的關(guān)系運算邏輯運算符邏輯運算符&&||!邏輯運算符的運算規(guī)則運算對象邏輯運算結(jié)果aba&&ba||b!a非0非0110非000100非001100001邏輯表達(dá)式邏輯表達(dá)式用邏輯運算符將運算對象連接成的式子例如:0&&'b'a&&b||c&&da||b-5||c/4!x+y>=z邏輯運算符的優(yōu)先級和結(jié)合性:!是單目運算符,右結(jié)合,高于算術(shù)&&和||是雙目運算符,左結(jié)合,高于賦值運算符,低于關(guān)系運算符邏輯運算規(guī)則從左到右依次進(jìn)行邏輯計算運算對象為非0表示邏輯真運算對象為0表示邏輯假邏輯運算的結(jié)果為0或1例如設(shè):a=15,b=0,c=-2a&&b&&c結(jié)果為0a||b||c結(jié)果為1(a+c)||b&&c結(jié)果為1邏輯運算規(guī)則(續(xù))運算按照從左至右的順序進(jìn)行,一旦能夠確定邏輯表達(dá)式的值,就立即結(jié)束運算——邏輯運算的短路性質(zhì)例如設(shè):a=1,b=0,c=-2a&&b&&c(a++)||++b&&--c為0,運算終止,表達(dá)式值為0為非0,運算終止,表達(dá)式值為1且a為2,b為0,c為-2(b,c保持原值)關(guān)系與邏輯運算符的應(yīng)用表示數(shù)學(xué)公式a>b>c判斷a,b,c三條線段能否組成一個三角形
a,b不同時為負(fù)
a+b>c&&a+c>b&&b+c>aa>=0||b>=0!(a<0&&b<0)(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b&&b>c條件表達(dá)式運算條件運算符:?:條件表達(dá)式的一般形式表達(dá)式1?表達(dá)式2:表達(dá)式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C語言中唯一的三目運算符,要正確區(qū)分用?和:分隔的表達(dá)式涉及條件運算符的優(yōu)先級與結(jié)合性條件運算符優(yōu)先級條件運算符優(yōu)先級高于賦值、逗號運算符,低于其他運算符例如:⑴m<n?x:a+3⑵a++>=10&&b-->20?a:b⑶x=3+a>5?100:200等價于:(m<n)?(x):(a+3)等價于:(a++>=10&&b-->20)
?a:b等價于:x=
((3+a>5)
?100:200)條件運算符的結(jié)合性
條件運算符具有右結(jié)合性當(dāng)一個表達(dá)式中出現(xiàn)多個條件運算符時,應(yīng)該將位于最右邊的問號與離它最近的冒號配對,并按這一原則正確區(qū)分各條件運算符的運算對象。例如:w<x?x+w:x<y?x:y
與w<x?x+w:(x<y?x:y)等價
與(w<x?x+w:x<y)?x:y不等價條件運算符的結(jié)合性
【例2.7】條件表達(dá)式的應(yīng)用——判斷整數(shù)的正負(fù)
#include"stdio.h" voidmain() {intx; scanf("%d",&x); x>0?printf("%s","Positive"):printf("%s","Negative"); }逗號表達(dá)式運算逗號表達(dá)式的一般形式
表達(dá)式1,表達(dá)式2,……,表達(dá)式n逗號表達(dá)式的值從左向右,依次對表達(dá)式求值,最后得到表達(dá)式n的值就是逗號表達(dá)式的值例如:⑴a=5,a++,a*3
表達(dá)式值為18,且a=6⑵t=1,t+5,t++表達(dá)式值為1,且t=2⑶x=(a=3*5,a*4)賦值表達(dá)式的值為60,且x=60,a=15賦值運算賦值運算符(右結(jié)合)
=+=-=*=/=%=&=|=^=>>=<<=賦值表達(dá)式將表達(dá)式的值存入變量對應(yīng)的內(nèi)存單元中m=12b=(++a)-2m%=3+n等價于m=m%(3+n)x*=(x=5)說明:賦值號左邊必須是變量,右邊可以是C語言任意合法的表達(dá)式例如:n=t+2<s合法
a+b=15
不合法賦值運算符僅優(yōu)先于“,”,且具有右結(jié)合性例如:
a=b=b*c>10等價于:a=(b=(
(b*c)>10)
)賦值號與數(shù)學(xué)中的等號含義不同例如:數(shù)學(xué)中a=b等價于b=aC語言中a=b不等價于b=a說明:【例2.8】賦值運算應(yīng)用實例。 #include"stdio.h" voidmain() {inti,j; floatx,y; i=j=1; x=y=1.1f; printf("i=%d,j=%d\n",i,j); x=i+j; y+=1;/*等價于y=y+1*/ printf("x=%4.2f,y=%4.2f\n",x,y); i=i+++j; x=2*x+y; printf(“i=%d,x=%4.2f\n”,i,x); }運行結(jié)果為:i=1,j=1x=2.00,y=2.10i=3,x=6.10位運算符~&^|<<>>位邏輯運算符移位運算符單目位運算符的運算對象只能是整型數(shù)據(jù)或字符型數(shù)據(jù),不能是實型數(shù)據(jù)運算對象一律按二進(jìn)制補(bǔ)碼參加運算,并按位進(jìn)行運算位運算的結(jié)果是一個整型數(shù)據(jù)低于單目、算術(shù)運算符,高于其他運算符低于單目、算術(shù)和關(guān)系運算符,高于其他運算符位運算符(1)位邏輯運算按位取反運算 按位取反運算符:~按位取反運算用來對一個二進(jìn)制數(shù)按位求反,即“1”變?yōu)椤?”,“0”變?yōu)椤?~運算常用于產(chǎn)生一些特殊的數(shù)。~運算還常用于加密子程序。例如:初始字節(jié)內(nèi)容00000101取反后11111010位運算符按位與運算按位與運算符:& 按位與運算的規(guī)則是當(dāng)兩個操作數(shù)的對應(yīng)位都是1時,則該位的運算結(jié)果為1,否則為“0“。例如:0x29&0x37的運算0x29:001010010x37:00110111與運算結(jié)果為:00100001,即0x21。位運算符按位與運算主要用途是清零、指定取操作數(shù)的某些位或保留操作數(shù)的某些位。
例如:
a&0運算后,將使數(shù)a清0。
a&0xF0運算后,保留數(shù)a的高4位為原值,使低4位清0。 a&0x0F運算后,保留數(shù)a的低4位為原值,使高4位清0。位運算符按位或運算按位或運算符:| 按位或運算的規(guī)則是當(dāng)兩個操作數(shù)的對應(yīng)位都是0時,則該位的運算結(jié)果為0,否則為1。例如:0x29|0x37的運算0x29:001010010x37:00110111按位或結(jié)果:00111111,即等于0x3f。位運算符
利用或運算的功能可以將操作數(shù)的部分位或所有位置為1。例如:a|0x0F運算后,使操作數(shù)a的低4位全置1,其余位保留原值。a|0xFF運算后,使操作數(shù)a的每一位全置1。位運算符按位異或運算按位異或運算符:^ 按位異或運算的規(guī)則是當(dāng)兩個操作數(shù)的對應(yīng)位相同時,則該位的運算結(jié)果為0,否則為1。例如:0x29^0x37的運算0x29:001010010x37:00110111按位異或結(jié)果:00011110,即等于0x1e位運算符 利用^運算的功能可以將數(shù)的特定位翻轉(zhuǎn),保留原值,不用中間變量就可以交換兩個變量的值。例如:a^0x0F運算后,將操作數(shù)a的低4位翻轉(zhuǎn),高4位不變。a^0x00運算后,將保留操作數(shù)a的原值。a=a^b;b=b^a;a=a^b;運算后,不用中間變量交換a、b的值,就可以實現(xiàn)操作數(shù)a和b的交換。位運算符
移位運算向左移位運算左移位運算符:<<左移位運算的左操作數(shù)是要進(jìn)行移位的整數(shù),右操作數(shù)是要移的位數(shù)。左移位運算的規(guī)則是將左操作數(shù)的高位左移后溢出并舍棄,空出的右邊低位補(bǔ)0。例如:15<<2運算15:00001111左移2位的結(jié)果為:00111100,等于60。使用左移位運算可以實現(xiàn)快速乘2運算。位運算符右移位運算右移位運算符:>>右移位運算的左操作數(shù)是要進(jìn)行移位的整數(shù),右操作數(shù)是要移的位數(shù)。右移位運算規(guī)則是低位右移后被舍棄,空出的左邊高位,對無符號數(shù)補(bǔ)入0;對帶符號數(shù),正數(shù)時空出的左邊高位補(bǔ)入0,負(fù)數(shù)時空出的左邊高位補(bǔ)入其符號位的值(算術(shù)右移)。例如:15>>2的運算,15:00001111右移2位的結(jié)果:00000011結(jié)果為3;-15>>2的運算-15:11110001右移2位的結(jié)果為:11111100,結(jié)果為-4。
使用右移位運算可以實現(xiàn)快速除2運算。位運算符【例2.9】取一個正整數(shù)a(用二進(jìn)制數(shù)表示)從右端開始的4~7位(最低位從0開始)。
#include"stdio.h" voidmain() { unsignedinta,b,c,d; scanf("%o",&a);/*八進(jìn)制形式輸入*/ b=a>>4;/*a右移四位*/ c=~(~0<<4);
/*得到一個4位全為1,其余位為0的數(shù)*/ d=b&c;/*取b的0~3位,即得到a的4~7位*/ printf(“a=%o,a(4~7)=%o”,a,d); }輸入數(shù)據(jù):331運行結(jié)果為:a=331,a(4~7)=15取地址運算符&為單目運算符運算對象只能是變量運算結(jié)果是變量的存儲地址例如有定義:inta,student;charch;可以對變量a、ch、student進(jìn)行&運算:&a&ch&student長度運算符sizeof為單目運算符運算對象只能是變量名或數(shù)據(jù)類型標(biāo)識符
運算結(jié)果為該變量或該數(shù)據(jù)類型的長度voidmain(){inta=5;doublex;printf("%d%d",sizeof(int),sizeof(a));printf("%d%d",sizeof(double),sizeof(x));printf("%d%d\n",sizeof(float),sizeof(char));}TC環(huán)境中輸出結(jié)果:2288
4
1運算中數(shù)據(jù)類型的轉(zhuǎn)換1.數(shù)據(jù)類型的自動轉(zhuǎn)換轉(zhuǎn)換原則:自動將精度低、表示范圍小的運算對象類型向精度高、表示范圍大的運算對象類型轉(zhuǎn)換
char,shortdouble
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年精準(zhǔn)干預(yù)依從性提升:個體化溝通方案優(yōu)化
- 煤制烯烴生產(chǎn)工安全知識水平考核試卷含答案
- 余熱余壓利用系統(tǒng)操作工安全意識強(qiáng)化知識考核試卷含答案
- 硅料腐蝕工風(fēng)險評估與管理強(qiáng)化考核試卷含答案
- 絲麻毛纖維預(yù)處理工安全宣貫?zāi)M考核試卷含答案
- 江浙高中發(fā)展聯(lián)盟2025-2026學(xué)年高三上學(xué)期1月學(xué)情監(jiān)測語文試題附答案
- 統(tǒng)編版本語文高中選擇性必修中冊《屈原列傳》第1課時教學(xué)設(shè)計
- 2026河北衡水市第八中學(xué)招聘備考題庫及參考答案詳解
- 老年術(shù)后3D打印體位調(diào)整輔具設(shè)計
- 企業(yè)級大數(shù)據(jù)分析流程詳解
- 危險化學(xué)品運輸安全手冊
- 光伏項目后期運營維護(hù)管理方案
- 安寧療護(hù)實踐指南(2025年版)解讀課件
- 粵教花城版音樂 鋼琴獨奏《雪橇》聽評課記錄
- 2025至2030中國球囊膽管導(dǎo)管行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 消防安全管理人責(zé)任書范文
- 管樁供貨保障方案(3篇)
- 光伏電站安全事故案例
- 2025年山東省濟(jì)寧市中考道德與法治試卷(含答案)
- 重癥肺炎患者護(hù)理要點回顧查房
- DBJ51T 037-2024 四川省綠色建筑設(shè)計標(biāo)準(zhǔn)
評論
0/150
提交評論