第2章 c語言基礎(chǔ)
《第2章 c語言基礎(chǔ)》由會員分享,可在線閱讀,更多相關(guān)《第2章 c語言基礎(chǔ)(46頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院 2.1 數(shù)據(jù)類型數(shù)據(jù)類型 2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 2.3 基本運算基本運算 2.4 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換 2.5 程序舉例程序舉例 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.1 數(shù)據(jù)類型數(shù)據(jù)類型 2.1.1 數(shù)據(jù)類型概述數(shù)據(jù)類型概述 整型(整型(int)數(shù)據(jù)類型數(shù)據(jù)類型基本類型基本類型整型整型單精度型(單精度型(float)字符型(字符型(char)長整型(長整型(long)短整型(短整型(short)實型實型雙精度型雙精度型(double)枚舉類型(枚舉類型(enum)共用體類型(共用體類型(
2、union)構(gòu)造類型構(gòu)造類型結(jié)構(gòu)體類型(結(jié)構(gòu)體類型(struct)數(shù)組類型數(shù)組類型空類型(空類型(void)指針類型(指針類型(*)安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.2 整型整型 歸納起來,歸納起來,C語言定義了語言定義了6種整型,分別是:種整型,分別是:基本整型基本整型 int無符號基本整型無符號基本整型 unsigned int短整型短整型 short或或short int無符號短整型無符號短整型 unsigned short或或unsigned short int長整型長整型 long或或long int無符號長整型無符號長整型 uns
3、igned long或或unsigned long int C C語言沒有規(guī)定各種整數(shù)類型的表示范圍,即沒有規(guī)定各種整語言沒有規(guī)定各種整數(shù)類型的表示范圍,即沒有規(guī)定各種整數(shù)的二進(jìn)制編碼長度(數(shù)據(jù)在內(nèi)存中所占的位數(shù))。數(shù)的二進(jìn)制編碼長度(數(shù)據(jù)在內(nèi)存中所占的位數(shù))。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.1 數(shù)據(jù)類型數(shù)據(jù)類型 表中列出了一般表中列出了一般PC機(jī)上規(guī)定的整數(shù)類型及相關(guān)數(shù)據(jù)。機(jī)上規(guī)定的整數(shù)類型及相關(guān)數(shù)據(jù)?!咀⒁狻咀⒁狻吭谠赩isual C+6.0Visual C+6.0中,基本整型(含中,基本整型(含無符號基無符號基本整型本整型)與)與長整型(含無符號長整型)在內(nèi)存中
4、所占的長整型(含無符號長整型)在內(nèi)存中所占的字節(jié)數(shù)以及表示的取值范圍對應(yīng)相同。字節(jié)數(shù)以及表示的取值范圍對應(yīng)相同。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.3 實型 C語言中實型數(shù)據(jù)又稱浮點型數(shù)據(jù)。語言中實型數(shù)據(jù)又稱浮點型數(shù)據(jù)。Turbo C提供了三種提供了三種表示實數(shù)的類型:表示實數(shù)的類型:單精度浮點數(shù)類型,簡稱浮點類型單精度浮點數(shù)類型,簡稱浮點類型 float 雙精度浮點數(shù)類型,簡稱雙精度類型雙精度浮點數(shù)類型,簡稱雙精度類型 double 長雙精度類型長雙精度類型 long double 實型的相關(guān)規(guī)定實型的相關(guān)規(guī)定 安 慶 師 范 學(xué) 院 計 算
5、 機(jī) 與 信 息 學(xué) 院2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.4 字符型字符型 字符類型的數(shù)據(jù)包括計算機(jī)所用編碼字符集中的所有字字符類型的數(shù)據(jù)包括計算機(jī)所用編碼字符集中的所有字符。常用的符。常用的ASCII字符集包括所有大小寫英文字母、數(shù)字、字符集包括所有大小寫英文字母、數(shù)字、各種標(biāo)點符號字符,還有一些控制字符,一共各種標(biāo)點符號字符,還有一些控制字符,一共128個。個。擴(kuò)展的擴(kuò)展的ASCII字符集包括字符集包括ASCII字符集中的全部字符和另字符集中的全部字符和另外的外的128個字符,總共個字符,總共256個字符。個字符。字符類型的數(shù)據(jù)在內(nèi)存中存儲的是它的字符類型的數(shù)據(jù)在內(nèi)存中存儲的是它的ASCII
6、碼值,一個碼值,一個字符通常占用一個字節(jié)的內(nèi)存空間。字符通常占用一個字節(jié)的內(nèi)存空間。除了占用的存儲空間不同(因而數(shù)據(jù)的取值范圍不同)除了占用的存儲空間不同(因而數(shù)據(jù)的取值范圍不同)以外,字符數(shù)據(jù)與整型數(shù)據(jù)是相似的。為了方便處理,以外,字符數(shù)據(jù)與整型數(shù)據(jù)是相似的。為了方便處理,C語言規(guī)定字符類型與整型基本一致,即也有有符號和無語言規(guī)定字符類型與整型基本一致,即也有有符號和無符號兩種類型。符號兩種類型。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.1 數(shù)據(jù)類型數(shù)據(jù)類型 字符類型的相關(guān)規(guī)定。字符類型的相關(guān)規(guī)定。由于由于ASCII碼字符的取值范圍是碼字符的取值范圍是0127,因此,既可以用
7、,因此,既可以用char類型表示,也可以用類型表示,也可以用unsigned char類型表示;擴(kuò)展類型表示;擴(kuò)展ASCII碼字符的取值范圍是碼字符的取值范圍是0255,因此,在,因此,在128255范范圍內(nèi)的擴(kuò)展圍內(nèi)的擴(kuò)展ASCII碼字符只能用碼字符只能用unsigned char類型表示。類型表示。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 2.2.1 標(biāo)標(biāo)識符符 1.標(biāo)識符標(biāo)識符 具體命名規(guī)則如下:具體命名規(guī)則如下:(1)標(biāo)識符的只能由下劃線標(biāo)識符的只能由下劃線“_”、數(shù)字、數(shù)字09與與26個大小寫字母個大小寫字母(az,AZ)構(gòu)成
8、。)構(gòu)成。Turbo C最多識別最多識別32個字符,個字符,Microsoft C最多識別最多識別8個字符。個字符。(2)標(biāo)識符的首字符必須是字母或下劃線標(biāo)識符的首字符必須是字母或下劃線“_”而不能是數(shù)字而不能是數(shù)字或其它符號?;蚱渌?。(3)C語言中大小寫字母是敏感的,即在標(biāo)識符中,大寫字語言中大小寫字母是敏感的,即在標(biāo)識符中,大寫字母和小寫字母代表不同的意義。例如:母和小寫字母代表不同的意義。例如:Name和和name是兩是兩個不同的標(biāo)識符。個不同的標(biāo)識符。(4)標(biāo)識符不能使用系統(tǒng)關(guān)鍵字,因為關(guān)鍵字是系統(tǒng)的保留標(biāo)識符不能使用系統(tǒng)關(guān)鍵字,因為關(guān)鍵字是系統(tǒng)的保留字,它們已有特定的含義。字,它
9、們已有特定的含義。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 2.關(guān)鍵字關(guān)鍵字 所謂關(guān)鍵字是指系統(tǒng)預(yù)定義的保留標(biāo)識符,又稱之為保所謂關(guān)鍵字是指系統(tǒng)預(yù)定義的保留標(biāo)識符,又稱之為保留字。它們有特定的含義,不能再作其它用途使用。留字。它們有特定的含義,不能再作其它用途使用。ANSI C定義的關(guān)鍵字共定義的關(guān)鍵字共32個:個:安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 2.2.2 常量常量1.整型常量整型常量(1)十進(jìn)制整數(shù):如十進(jìn)制整數(shù):如154、565、-6523。(2)八進(jìn)制整數(shù):以八
10、進(jìn)制整數(shù):以0開頭的數(shù)是八進(jìn)制數(shù)。如開頭的數(shù)是八進(jìn)制數(shù)。如0123表示八進(jìn)表示八進(jìn)制數(shù)的制數(shù)的(123)8,等于十進(jìn)制數(shù),等于十進(jìn)制數(shù)83。(3)十六進(jìn)制整數(shù):以十六進(jìn)制整數(shù):以0 x開頭的數(shù)是十六進(jìn)制數(shù)。如開頭的數(shù)是十六進(jìn)制數(shù)。如0 x4a即即(4a)16,等于十進(jìn)制數(shù),等于十進(jìn)制數(shù)74。在上述方法表示的整數(shù)后面附一個字母在上述方法表示的整數(shù)后面附一個字母l或或L作后綴,即作后綴,即可表示該數(shù)據(jù)的類型是長整型的。例如可表示該數(shù)據(jù)的類型是長整型的。例如-63L、0123LU、0 x4aL等分別表示十進(jìn)制有符號長整型數(shù)、八進(jìn)制無符號等分別表示十進(jìn)制有符號長整型數(shù)、八進(jìn)制無符號長整型數(shù)和十六進(jìn)制有
11、符號長整型數(shù)。長整型數(shù)和十六進(jìn)制有符號長整型數(shù)。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 2.實型常量實型常量 實型常量只能用十進(jìn)制形式表示,不能用八進(jìn)制和十六實型常量只能用十進(jìn)制形式表示,不能用八進(jìn)制和十六進(jìn)制形式表示。進(jìn)制形式表示。(1)小數(shù)形式:由數(shù)字和小數(shù)點組成,如小數(shù)形式:由數(shù)字和小數(shù)點組成,如3.1415926、-0.12、.4、3.等都是實數(shù)。等都是實數(shù)。(2)指數(shù)形式:如指數(shù)形式:如1.8e5或或1.8E5都都代表代表1.8x105。但注意字母。但注意字母e(或(或E)之前必須有數(shù)字,且)之前必須有數(shù)字,且e后面指數(shù)必須
12、為整數(shù),如后面指數(shù)必須為整數(shù),如e3、2.1e3.2、e等都不是合法的指數(shù)形式。等都不是合法的指數(shù)形式。3.字符常量字符常量 字符型常量是由一對單引號括起來的單個字符構(gòu)成,例字符型常量是由一對單引號括起來的單個字符構(gòu)成,例如如,a,b,1等都是有效的字符型常量。等都是有效的字符型常量。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 C語言中的常用轉(zhuǎn)義字符及這些字符的含義語言中的常用轉(zhuǎn)義字符及這些字符的含義 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 4.字符串常量字符串常量 字符串常量是
13、由一對雙引號括起來的字符序列組成的,例字符串常量是由一對雙引號括起來的字符序列組成的,例如如“abc”、“a”等都是字符串常量。等都是字符串常量。字符串常量與字符常量的區(qū)別:字符串常量與字符常量的區(qū)別:(1)字符常量由單引號括起來,字符串常量由雙引號括起來。字符常量由單引號括起來,字符串常量由雙引號括起來。(2)字符常量占一個字節(jié)的內(nèi)存空間。字符串常量在內(nèi)存中存字符常量占一個字節(jié)的內(nèi)存空間。字符串常量在內(nèi)存中存儲時由系統(tǒng)自動在存儲的所有字符尾部添加串結(jié)束標(biāo)記儲時由系統(tǒng)自動在存儲的所有字符尾部添加串結(jié)束標(biāo)記0,所以,字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字符所占所以,字符串常量占的內(nèi)存字節(jié)數(shù)等于字
14、符串中字符所占的字節(jié)數(shù)加的字節(jié)數(shù)加1。注意不要將單個字符組成的字符串常量與字符常量混淆。注意不要將單個字符組成的字符串常量與字符常量混淆。不能把一個字符串常量賦給一個字符變量。不能把一個字符串常量賦給一個字符變量。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 5.符號常量符號常量 符號常量就是使用符號代表常量。符號常量就是使用符號代表常量。C語言中允許用標(biāo)識符定義一個常量,這種常量定語言中允許用標(biāo)識符定義一個常量,這種常量定義在義在C語言中被稱之為語言中被稱之為“宏定義宏定義”。2.2.3 變量變量 一個變量有一個變量有3個相關(guān)的要素:個相
15、關(guān)的要素:變量名;變量名;變量的存儲單元;變量的存儲單元;變量(存儲單元存放)的值。變量(存儲單元存放)的值。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 1.變量的定義和賦值變量的定義和賦值 C語言要求程序中使用的每個變量都必須先定義,然后才語言要求程序中使用的每個變量都必須先定義,然后才能使用。定義變量需要用變量定義語句進(jìn)行,其形式為:能使用。定義變量需要用變量定義語句進(jìn)行,其形式為:類型類型 變量名變量名=初值初值,變量名,變量名=初值初值,;例如:例如:int a;int x,y,min;int m,n=3,w=5;若對定義的多個變
16、量賦相同的初值,不能采用連續(xù)賦初值若對定義的多個變量賦相同的初值,不能采用連續(xù)賦初值的形式,如的形式,如 int a=b=c=5,必須采用形式:,必須采用形式:int a=5,b=5,c=5?!咀⒁狻咀⒁狻砍瞬荒苡藐P(guān)鍵字做變量名外,可以用任何標(biāo)識】除了不能用關(guān)鍵字做變量名外,可以用任何標(biāo)識符作為變量名符作為變量名。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 2.整型數(shù)據(jù)的存儲整型數(shù)據(jù)的存儲 short int型補(bǔ)碼為型補(bǔ)碼為16位二進(jìn)制數(shù),它表示一個有符號整數(shù),其位二進(jìn)制數(shù),它表示一個有符號整數(shù),其特點是:當(dāng)首位為特點是:當(dāng)首位為0時表
17、示一個正數(shù),當(dāng)首位為時表示一個正數(shù),當(dāng)首位為1時表示一個負(fù)時表示一個負(fù)數(shù)。正數(shù)的補(bǔ)碼與其原碼相同,而負(fù)數(shù)的補(bǔ)碼為其對應(yīng)的正數(shù)數(shù)。正數(shù)的補(bǔ)碼與其原碼相同,而負(fù)數(shù)的補(bǔ)碼為其對應(yīng)的正數(shù)的反碼加的反碼加1。如:。如:+4補(bǔ)補(bǔ)=0000 0000 0000 0100 -4補(bǔ)補(bǔ)=1111 1111 1111 1100 一個用補(bǔ)碼表示的二進(jìn)制數(shù),最高位為符號位,當(dāng)符號位為一個用補(bǔ)碼表示的二進(jìn)制數(shù),最高位為符號位,當(dāng)符號位為“0”(即正數(shù))時,其余位即為此數(shù)的二進(jìn)制值;但當(dāng)符號位為(即正數(shù))時,其余位即為此數(shù)的二進(jìn)制值;但當(dāng)符號位為“1”(即負(fù)數(shù))時,其余位不是此數(shù)的二進(jìn)制值,應(yīng)把它們按位求(即負(fù)數(shù))時,其余
18、位不是此數(shù)的二進(jìn)制值,應(yīng)把它們按位求反,且在最低位加反,且在最低位加1,才是它的二進(jìn)制值。如:,才是它的二進(jìn)制值。如:X補(bǔ)補(bǔ)=1111 1111 1111 1101則則X=-000 0000 0000 0011=-3 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.2 標(biāo)識符、常量與變量標(biāo)識符、常量與變量 3.實型數(shù)據(jù)的存儲實型數(shù)據(jù)的存儲 實型數(shù)據(jù)是按指數(shù)形式存儲的。以微機(jī)中存儲實型數(shù)據(jù)是按指數(shù)形式存儲的。以微機(jī)中存儲float型數(shù)據(jù)為型數(shù)據(jù)為例,例,float型數(shù)據(jù)在內(nèi)存中占據(jù)型數(shù)據(jù)在內(nèi)存中占據(jù)4個字節(jié)即個字節(jié)即32位二進(jìn)制信息,位二進(jìn)制信息,分別存放符號位、規(guī)格化的尾數(shù)、階符位和
19、階碼。分別存放符號位、規(guī)格化的尾數(shù)、階符位和階碼。例如,實數(shù)例如,實數(shù)-32.28E-20-32.28E-20的存儲情況如圖所示。的存儲情況如圖所示。-0.322800-18 4.字符型數(shù)據(jù)的存儲字符型數(shù)據(jù)的存儲l 用一個字節(jié)(用一個字節(jié)(8 8位二進(jìn)制信息)存儲字符類型數(shù)據(jù)。對于無符位二進(jìn)制信息)存儲字符類型數(shù)據(jù)。對于無符號字符類型(號字符類型(unsigned charunsigned char)數(shù)據(jù)直接存放)數(shù)據(jù)直接存放ASCIIASCII碼或擴(kuò)展碼或擴(kuò)展ASCIIASCII碼。對于有符號字符類型(碼。對于有符號字符類型(charchar)的數(shù)據(jù)也是用補(bǔ)碼存)的數(shù)據(jù)也是用補(bǔ)碼存儲的。儲的
20、。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算2.3.1 算術(shù)運算算術(shù)運算1.基本算術(shù)運算符基本算術(shù)運算符 C語言規(guī)定:語言規(guī)定:(1)%運算符僅用于整型變量或整型常量的運算,運算符僅用于整型變量或整型常量的運算,a%b的結(jié)果為的結(jié)果為a除以除以b的余數(shù),余數(shù)的符號與被除數(shù)相同。的余數(shù),余數(shù)的符號與被除數(shù)相同。(2)+、-、*、/運算符的兩個操作數(shù)既可以是整數(shù),也可以是實數(shù)。運算符的兩個操作數(shù)既可以是整數(shù),也可以是實數(shù)。當(dāng)兩個操作數(shù)均是整數(shù)時,結(jié)果仍是整數(shù);若參加運算的兩個當(dāng)兩個操作數(shù)均是整數(shù)時,結(jié)果仍是整數(shù);若參加運算的兩個操作數(shù)中有一個是實數(shù),則結(jié)果為操作
21、數(shù)中有一個是實數(shù),則結(jié)果為double型。型。(3)當(dāng)對兩個整型的數(shù)據(jù)相除時結(jié)果為整數(shù)。但是如果除數(shù)或被除當(dāng)對兩個整型的數(shù)據(jù)相除時結(jié)果為整數(shù)。但是如果除數(shù)或被除數(shù)中有一個為負(fù)數(shù),則舍入的方向是不固定的。如:數(shù)中有一個為負(fù)數(shù),則舍入的方向是不固定的。如:-5/3在有在有的機(jī)器上得到結(jié)果的機(jī)器上得到結(jié)果-1,有的機(jī)器則給出結(jié)果,有的機(jī)器則給出結(jié)果-2。多數(shù)機(jī)器采取。多數(shù)機(jī)器采取“向零取整向零取整”方法,即方法,即-5/3=-1,取整后向零靠攏。,取整后向零靠攏。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算2.算術(shù)表達(dá)式算術(shù)表達(dá)式(1)算術(shù)表達(dá)式定義算術(shù)表達(dá)式定義
22、由算術(shù)運算符、括號以及操作對象組成的符合由算術(shù)運算符、括號以及操作對象組成的符合C語言語法規(guī)語言語法規(guī)則的表達(dá)式稱為算術(shù)表達(dá)式。如:則的表達(dá)式稱為算術(shù)表達(dá)式。如:a+b-c/d*(a-c)。(2)優(yōu)先級和結(jié)合性優(yōu)先級和結(jié)合性 在表達(dá)式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行。若在表達(dá)式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行。若一個運算對象兩側(cè)的運算符的優(yōu)先級別相同,如一個運算對象兩側(cè)的運算符的優(yōu)先級別相同,如a-b+c,則按,則按規(guī)定的規(guī)定的“結(jié)合方向結(jié)合方向”處理。處理。算術(shù)運算符的結(jié)合方向為算術(shù)運算符的結(jié)合方向為“自左至右自左至右”,又成為左結(jié)合性,又成為左結(jié)合性,即先左后右,因此即先左
23、后右,因此b先與減號結(jié)合,執(zhí)行先與減號結(jié)合,執(zhí)行a-b的運算,再執(zhí)行的運算,再執(zhí)行加加c的運算。的運算。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算3.自增、自減運算符自增、自減運算符 既可以放在操作數(shù)前,也可以放在操作數(shù)后,并且操作對象既可以放在操作數(shù)前,也可以放在操作數(shù)后,并且操作對象只能是變量,不能是常量或表達(dá)式。只能是變量,不能是常量或表達(dá)式。如如i+,i-/*表示在使用表示在使用i值之后將值之后將i的值加的值加(減減)1*/+i,-i /*表示在使用表示在使用i值之前將值之前將i的值加的值加(減減)1*/例如:設(shè)例如:設(shè)i的原值為的原值為5,則執(zhí)行下
24、面的賦值語句:,則執(zhí)行下面的賦值語句:j=i+;/*先將先將i的值賦給的值賦給j,i再自增再自增1,賦值語句執(zhí)行完,賦值語句執(zhí)行完 后后i的值為的值為6,j的值為的值為5*/j=+i;/*先將先將i的值自增的值自增1,再賦給,再賦給j,賦值語句執(zhí)行完,賦值語句執(zhí)行完 后后i的值為的值為6,j的值為的值為6*/安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算【注意【注意】(1)自增自減運算符的優(yōu)先級較高,和單目運算符相同。其結(jié)合自增自減運算符的優(yōu)先級較高,和單目運算符相同。其結(jié)合方向是方向是“自右向左自右向左”(右結(jié)合性)。(右結(jié)合性)。考慮表達(dá)式考慮表達(dá)式-i+,
25、由于,由于“-”和和“+”優(yōu)先級相同,均為右結(jié)合優(yōu)先級相同,均為右結(jié)合性,因此相當(dāng)于性,因此相當(dāng)于-(i+)。(2)盡管自增自減運算符給程序員帶來了方便,但同時也帶來了盡管自增自減運算符給程序員帶來了方便,但同時也帶來了副作用。副作用。例如,例如,“printf(%d,%dn,i,i+);”在不同的編譯環(huán)境下結(jié)果在不同的編譯環(huán)境下結(jié)果有可能不同。若有可能不同。若i的值為的值為3,則結(jié)果可能是,則結(jié)果可能是“3,3”,也可能是,也可能是“4,3”。(3)C編譯在處理時盡可能多地自左而右將若干個字符組成一個編譯在處理時盡可能多地自左而右將若干個字符組成一個運算符(在處理標(biāo)識符和關(guān)鍵字時也按同一原則
26、處理),如運算符(在處理標(biāo)識符和關(guān)鍵字時也按同一原則處理),如i+j,將解釋為,將解釋為(i+)+j,而不是,而不是i+(+j)。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算2.3.2 賦值運算1.賦值運算符賦值運算符 C語言中,賦值被認(rèn)為是一種運算,由賦值運算符將語言中,賦值被認(rèn)為是一種運算,由賦值運算符將一個變量和一個表達(dá)式連接起來的式子稱為賦值表達(dá)一個變量和一個表達(dá)式連接起來的式子稱為賦值表達(dá)式。其形式是:式。其形式是:賦值表達(dá)式的值也可以再賦給其它變量,如:賦值表達(dá)式的值也可以再賦給其它變量,如:a=(b=3+5)。【注意【注意】賦值運算符】賦值運算符
27、“=”不同于數(shù)學(xué)中使用的符號,不同于數(shù)學(xué)中使用的符號,它沒有它沒有“相等相等”的含義。如果賦值運算符兩側(cè)的數(shù)據(jù)的含義。如果賦值運算符兩側(cè)的數(shù)據(jù)類型不同時,在賦值時要進(jìn)行類型轉(zhuǎn)換。類型不同時,在賦值時要進(jìn)行類型轉(zhuǎn)換。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算2.復(fù)合賦值運算符復(fù)合賦值運算符 C語言允許在賦值運算符語言允許在賦值運算符“=”之前加上其他運算符以構(gòu)成之前加上其他運算符以構(gòu)成復(fù)合的賦值運算符。例如:復(fù)合的賦值運算符。例如:a+=5;等價于等價于a=a+5;a*=b+5;等價于等價于 a=a*(b+5);a%=5;等價于等價于 a=a%8;在在C語言中
28、,可以使用的復(fù)合賦值運算符有:語言中,可以使用的復(fù)合賦值運算符有:+=,-=,*=,/=,%=,=,&=,=,|=3.運算符的優(yōu)先級和結(jié)合性運算符的優(yōu)先級和結(jié)合性 賦值運算符和復(fù)合賦值運算符的優(yōu)先級相同,且都具有右賦值運算符和復(fù)合賦值運算符的優(yōu)先級相同,且都具有右結(jié)合性。結(jié)合性。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算【例【例2-1】分析下面程序的運行結(jié)果】分析下面程序的運行結(jié)果/*EX2-1.C */main()int a=12;a+=a-=a*a;printf(%d n,a);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運
29、算2.3.3 位運算位運算 運算規(guī)則運算規(guī)則 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算1.按位取反按位取反【格式【格式】x【例【例2-2】分析下面程序的運行結(jié)果】分析下面程序的運行結(jié)果/*EX2-2.C */main()unsigned char x=56,y;y=x;printf(%d n,y);其運算過程為:其運算過程為:56(00111000)56(00111000)199(11000111)安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算2.按位與按位與【格式【格式】x&y【例【例2-3】分析下面程序的運行結(jié)果】分析下
30、面程序的運行結(jié)果main()unsigned char x=56,y=157,z;z=x&y;printf(%d n,z);其運算過程為:其運算過程為:56:00111000&157:10011101 0001100024 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算3.按位或按位或【格式【格式】x|y【例【例2-4】分析下面程序的運行結(jié)果】分析下面程序的運行結(jié)果main()unsigned char x=56,y=157,z;z=x|y;printf(%d n,z);其運算過程為:其運算過程為:56:00111000|157:10011101 1011110
31、1189 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算4.按位異或按位異或【格式【格式】x y【例【例2-5】分析下面程序的運行結(jié)果?!糠治鱿旅娉绦虻倪\行結(jié)果。main()unsigned char x=56,y=157,z;z=xy;printf(%d n,z);其運算過程為:其運算過程為:56:00111000 157:1001110110100101165 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算5.左位移左位移【格式【格式】x要位移的位數(shù)要位移的位數(shù)【功能【功能】把操作對象的二進(jìn)制數(shù)向左移動指定的位,并在】把操作對
32、象的二進(jìn)制數(shù)向左移動指定的位,并在右面補(bǔ)上相應(yīng)的右面補(bǔ)上相應(yīng)的0,高位溢出。,高位溢出?!臼纠臼纠咳纭咳鐇=00001111,y=x要位移的位數(shù)要位移的位數(shù)【功能【功能】把操作對象的二進(jìn)制數(shù)向右移動指定的位,移出的低】把操作對象的二進(jìn)制數(shù)向右移動指定的位,移出的低位舍棄;高位則:位舍棄;高位則:(1)對無符號數(shù)和有符號中的正數(shù),補(bǔ)對無符號數(shù)和有符號中的正數(shù),補(bǔ)0,稱為,稱為“邏輯右移邏輯右移”;(2)有符號數(shù)中的負(fù)數(shù)補(bǔ)有符號數(shù)中的負(fù)數(shù)補(bǔ)1,稱為,稱為“算術(shù)右移算術(shù)右移”?!臼纠臼纠咳纭咳鐇=01010001,y=x2,則,則y=00010100;如如x=11010100,y=x2,則,
33、則y=11110101。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算【注意【注意】右移會引起數(shù)據(jù)的變化,具體說,右移一位相當(dāng)于對】右移會引起數(shù)據(jù)的變化,具體說,右移一位相當(dāng)于對原來的數(shù)值除以原來的數(shù)值除以2。右移。右移n位相當(dāng)于對原來的數(shù)值除以位相當(dāng)于對原來的數(shù)值除以2n。如上例如上例010100012得得00010100,即是,即是81/4=20。負(fù)數(shù)高位補(bǔ)負(fù)數(shù)高位補(bǔ)1的目的也是右移的目的也是右移n位相當(dāng)于對原來的數(shù)值絕對值除位相當(dāng)于對原來的數(shù)值絕對值除以以2n,而負(fù)號不變,而負(fù)號不變。如上例如上例110101002得得11110101,即是,即是-44/4
34、=-11。但上述結(jié)論只適用于該數(shù)右移被溢出舍棄的低位中不包含但上述結(jié)論只適用于該數(shù)右移被溢出舍棄的低位中不包含1的的情況情況,若包含若包含1,右移,右移n位相當(dāng)于對原來的數(shù)值除以位相當(dāng)于對原來的數(shù)值除以2n后再取整后再取整(如如81/4=20的例子的例子);而對于負(fù)數(shù),右移舍棄的低位使得補(bǔ)碼減;而對于負(fù)數(shù),右移舍棄的低位使得補(bǔ)碼減少一個小數(shù),商的絕對值則向增大的方向取整,如:少一個小數(shù),商的絕對值則向增大的方向取整,如:110100012得得11110100,即,即-472得得-12,而,而-47/4=-11 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算【說明
35、【說明】(1)復(fù)合賦值運算符復(fù)合賦值運算符 除按位取反運算外,其余除按位取反運算外,其余5個位運算符均可與賦值運算符個位運算符均可與賦值運算符一起,構(gòu)成復(fù)合賦值運算符:一起,構(gòu)成復(fù)合賦值運算符:&=、|+、=、=。(2)不同長度數(shù)據(jù)間的位運算不同長度數(shù)據(jù)間的位運算低字節(jié)對齊,短數(shù)的高字節(jié)低字節(jié)對齊,短數(shù)的高字節(jié)按最高位補(bǔ)位:按最高位補(bǔ)位:對無符號數(shù)和有符號中的正數(shù),補(bǔ)對無符號數(shù)和有符號中的正數(shù),補(bǔ)0;有符號數(shù)中的負(fù)數(shù),補(bǔ)有符號數(shù)中的負(fù)數(shù),補(bǔ)1。2.3.4 逗號運算1.逗號運算符逗號運算符 其一般形式為:其一般形式為:表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2 安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信
36、息 學(xué) 院2.3 基本運算基本運算 逗號表達(dá)式的求值過程是:先求表達(dá)式逗號表達(dá)式的求值過程是:先求表達(dá)式1的值,再求表達(dá)的值,再求表達(dá)式式2的值,表達(dá)式的值,表達(dá)式2的值就是整個逗號表達(dá)式的值。的值就是整個逗號表達(dá)式的值。一個逗號表達(dá)式可以與另一個表達(dá)式構(gòu)成一個新的逗號表一個逗號表達(dá)式可以與另一個表達(dá)式構(gòu)成一個新的逗號表達(dá)式。達(dá)式。例如:例如:(a=5-3,a*5),a+15 逗號表達(dá)式的一般形式可以擴(kuò)展為:逗號表達(dá)式的一般形式可以擴(kuò)展為:表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2,表達(dá)式,表達(dá)式3,表達(dá)式,表達(dá)式n2.運算符的優(yōu)先級和結(jié)合性運算符的優(yōu)先級和結(jié)合性 逗號運算符是所有運算符中級別最低的。逗
37、號運算符是所有運算符中級別最低的。逗號表達(dá)式的結(jié)合性為自左向右的。逗號表達(dá)式的結(jié)合性為自左向右的?!咀⒁狻咀⒁狻坎⒉皇侨魏蔚胤匠霈F(xiàn)的逗號都是作為逗號運算符?!坎⒉皇侨魏蔚胤匠霈F(xiàn)的逗號都是作為逗號運算符。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.3 基本運算基本運算【例【例2-6】分析下面程序的運行結(jié)果?!糠治鱿旅娉绦虻倪\行結(jié)果。main()int a=5,b=6,c=1;printf(%d%dn,(+a,b+),c+2);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.4 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換2.4.1 類型自動轉(zhuǎn)換類型自動轉(zhuǎn)換 轉(zhuǎn)換規(guī)則轉(zhuǎn)換規(guī)則 高高 doubl
38、e float long unsigned 低低 int char,short 圖中橫向向左的箭頭表示必定的轉(zhuǎn)換,縱向的箭頭表示當(dāng)圖中橫向向左的箭頭表示必定的轉(zhuǎn)換,縱向的箭頭表示當(dāng)運算對象為不同類型時轉(zhuǎn)換的方向。運算對象為不同類型時轉(zhuǎn)換的方向。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.4 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換2.4.2 賦值類型轉(zhuǎn)換賦值類型轉(zhuǎn)換(1)當(dāng)整型數(shù)據(jù)賦給浮點型變量時,數(shù)值上不發(fā)生任何變化,但當(dāng)整型數(shù)據(jù)賦給浮點型變量時,數(shù)值上不發(fā)生任何變化,但有效位增加。有效位增加。(2)當(dāng)單、雙精度浮點型數(shù)據(jù)賦給整型變量時,浮點數(shù)的小數(shù)部當(dāng)單、雙精度浮點型數(shù)據(jù)賦給整型變量時,浮點
39、數(shù)的小數(shù)部分將被舍棄。分將被舍棄。(3)將字符型數(shù)據(jù)賦給整型變量時,由于字符只占一個字節(jié),而將字符型數(shù)據(jù)賦給整型變量時,由于字符只占一個字節(jié),而整型變量為整型變量為4個字節(jié),因此將字符數(shù)據(jù)(個字節(jié),因此將字符數(shù)據(jù)(8位)放到整型變量位)放到整型變量低低8位中。位中。將將unsigned char型數(shù)據(jù)賦給型數(shù)據(jù)賦給unsigned int或或int型變量時,型變量時,高高24位補(bǔ)位補(bǔ)0。將將char型數(shù)據(jù)賦給型數(shù)據(jù)賦給unsigned int或或int型變量時,若字符值型變量時,若字符值最高位為最高位為0,則高,則高24位補(bǔ)位補(bǔ)0;若字符值最高位為;若字符值最高位為1,則高,則高24位全補(bǔ)位全
40、補(bǔ)1。安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.4 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換【例【例2-7】分析下面程序的運行結(jié)果。】分析下面程序的運行結(jié)果。main()unsigned char a;char b;unsigned int x;int y;a=0 xfe;x=a;y=a;printf(%x%xn,x,y);b=0 x7e;x=b;y=b;printf(%x%xn,x,y);b=0 xfe;x=b;y=b;printf(%x%xn,x,y);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.4 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換(4)當(dāng)長度長的整型數(shù)據(jù)賦給長度短的變量時,將進(jìn)行截
41、斷賦值。當(dāng)長度長的整型數(shù)據(jù)賦給長度短的變量時,將進(jìn)行截斷賦值?!纠纠?-8】分析下面程序的運行結(jié)果。】分析下面程序的運行結(jié)果。/*EX2-8.C */main()unsigned short a;short b;unsigned long x;x=0 x6a8b5cfd;a=x;b=x;printf(%x%xn,a,b);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.4 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換(5)當(dāng)整型數(shù)據(jù)賦給長度相同的變量時,將進(jìn)行原樣賦值。當(dāng)整型數(shù)據(jù)賦給長度相同的變量時,將進(jìn)行原樣賦值。【例【例2-9】分析下面程序的運行結(jié)果?!糠治鱿旅娉绦虻倪\行結(jié)果。/*EX2-9.C
42、*/main()unsigned int a;int b;a=0 xffff;b=a;printf(%x%xn,a,b);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.4 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換2.4.3 強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換 強(qiáng)制類型轉(zhuǎn)換的一般形式為:強(qiáng)制類型轉(zhuǎn)換的一般形式為:(類型名類型名)(表達(dá)式表達(dá)式)【注意【注意】(1)表達(dá)式應(yīng)該用括號括起來。表達(dá)式應(yīng)該用括號括起來。(2)經(jīng)強(qiáng)制類型轉(zhuǎn)換后,得到的是一個所需類型的中間變量,經(jīng)強(qiáng)制類型轉(zhuǎn)換后,得到的是一個所需類型的中間變量,原來變量的類型并沒有發(fā)生任何變化。原來變量的類型并沒有發(fā)生任何變化?!纠纠?-10】分析下面程
43、序的運行結(jié)果。】分析下面程序的運行結(jié)果。main()int a;float b=3.5;a=(int)b;printf(a=%d,b=%fn,a,b);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.5 程序舉例程序舉例 【例【例2-11】分析下面程序的運行結(jié)果。】分析下面程序的運行結(jié)果。/*EX2-11.C */main()int x,y;x=40;y=(x=x-4,x%7);printf(y=%dn,y);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.5 程序舉例程序舉例 【例【例2-12】分析下面程序的運行結(jié)果?!糠治鱿旅娉绦虻倪\行結(jié)果。/*EX2-12.C */m
44、ain()int m,n,k;m=3;n=9;k=(+m)+(-n);printf(m=%d,n=%d,k=%dn,m,n,k);m=3,n=9;k=(m-)+(n+);printf(m=%d,n=%d,k=%dn,m,n,k);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院2.5 程序舉例程序舉例 【例【例2-13】取一個整數(shù)】取一個整數(shù)x從右端開始的從右端開始的47位。位。【分析【分析】(1)先使先使x右移右移4位,目的是使要取出的那幾位移到最右端。位,目的是使要取出的那幾位移到最右端。右移到右端可以用下面方法實現(xiàn):右移到右端可以用下面方法實現(xiàn):x 4(2)設(shè)置一個低設(shè)置一個低4位全為位全為1,其余全為,其余全為0的數(shù)。的數(shù)??捎孟旅娣椒▽崿F(xiàn):可用下面方法實現(xiàn):(0 4)&(04;n=(04);k=m&n;printf(%x,%dn%x,%dn,m,m,k,k);安 慶 師 范 學(xué) 院 計 算 機(jī) 與 信 息 學(xué) 院
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。