




已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
,第二章,基本數(shù)據(jù)類型和表達(dá)式,本章要點(diǎn),數(shù)據(jù)的描述規(guī)則 數(shù)據(jù)的操作規(guī)則,主要內(nèi)容,2.1 C的數(shù)據(jù)類型 2.2 常量與變量 2.3 整型數(shù)據(jù) 2.4 浮點(diǎn)型數(shù)據(jù)運(yùn)行 2.5 字符型數(shù)據(jù),主要內(nèi)容,2.變量賦初值 2.7 各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算 2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 2.9 賦值運(yùn)算符和賦值表達(dá)式 2.10 逗號運(yùn)算符和逗號表達(dá)式,2019/6/29,5,數(shù)值的表示方法原碼、反碼和補(bǔ)碼 原碼:最高位為符號位,其余各位為數(shù)值本身的絕對值 反碼: 正數(shù):反碼與原碼相同 負(fù)數(shù):符號位為1,其余位對原碼取反 補(bǔ)碼: 正數(shù):原碼、反碼、補(bǔ)碼相同 負(fù)數(shù):最高位為1,其余位為原碼取反,再對整個(gè)數(shù)加1,2019/6/29,6,純整數(shù)的補(bǔ)碼最小可以表示到2n 。這時(shí)在-2n中,符號位的1既表示符號“”,也表示數(shù)值2n 。 若要一個(gè)負(fù)數(shù)變補(bǔ)碼,其方法是符號位置1,其余各位0變1,1變0,然后在最末位上加1 。 負(fù)數(shù)補(bǔ)碼轉(zhuǎn)換成十進(jìn)制數(shù):最高位不動,其余位取反加1,例 補(bǔ)碼:11111001 取反:10000110 加1: 10000111=-7,2019/6/29,7,2.1 C的數(shù)據(jù)類型,C語言提供了以下一些數(shù)據(jù)類型。,數(shù)據(jù)類型,構(gòu)造類型,指針類型,空類型(無值類型) void,數(shù)據(jù)類型決定: 1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù); 2. 數(shù)據(jù)取值范圍; 3. 其上可進(jìn)行的操作,2019/6/29,8,2.2 常量與變量,2.2.1 常量和符號常量 在程序運(yùn)行過程中,其值不能被改變的量稱為常量 常量區(qū)分為不同的類型:,整型 100,125,-100,0 實(shí)型 3.14 , 0.125,-3.789 字符型 a, b,2 字符串 a, ab,1232,直接 常量,2019/6/29,9,例2.1 符號常量的使用 #define PRICE 30 #include void main ( ) int num, total; num=10; total=num * PRICE; printf(total=%dn,total); ,符號常量: 用一個(gè)標(biāo)識符代表一個(gè)常量。符號常量的值在其作用域內(nèi)不能改變,也不能再被賦值。,運(yùn)行結(jié)果: total=300,說明: 程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算,說明:如再用賦值語句給PRICE賦值是錯的 PRICE=40;/* 錯誤,不能給符號常量賦值,2019/6/29,10,2.2 常量與變量,2.2.2 變量 變量代表內(nèi)存中具有特定屬性的一個(gè)存儲單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運(yùn)行期間,這些值是可以改變的。 變量名實(shí)際上是一個(gè)以一個(gè)名字對應(yīng)代表一個(gè)地址,在對程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。,2019/6/29,11,2.2 常量與變量,變量命名的規(guī)定:語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。 例:sum,_total, month, Student_name, lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D64,ab,2019/6/29,12,2.2 常量與變量,注意: 編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個(gè)不同的字符。 建議變量名的長度最好不要超過8個(gè)字符。 在選擇變量名和其它標(biāo)識符時(shí),應(yīng)注意做到“見名知意”,即選有含意的英文單詞 (或其縮寫)作標(biāo)識符。 要求對所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用” 。,2019/6/29,13,2.3 整型數(shù)據(jù),2.3.1整型常量的表示方法 整型常量即整常數(shù)。在語言中,整常數(shù) 可用以下三種形式表示: (1)十進(jìn)制整數(shù)。 如:123, -456, 4。 (2)八進(jìn)制整數(shù)。以0開頭的數(shù)是八進(jìn)制數(shù)。 如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。,2019/6/29,14,2.3 整型數(shù)據(jù),(3)十六進(jìn)制整數(shù)。以0x開頭的數(shù)是16進(jìn)制數(shù)。 如:0x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù) 291。 -0x12等于十進(jìn)制數(shù)10。,2.3.2 整型變量 (1)整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。 如: int i; /* 定義為整型變量 */ i=10; /* 給i賦以整數(shù)10 */,2019/6/29,15,2.3 整型數(shù)據(jù),注意: 十進(jìn)制數(shù)10的二進(jìn)制形式為1010,Turbo C 2.0和Turbo C+ 3.0為一個(gè)整型變量在內(nèi)存中分配2個(gè)字節(jié)的存儲單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC+ 6.0則分配4個(gè)字節(jié))。 數(shù)值是以補(bǔ)碼(complement) 表示的。,2019/6/29,16,2.3 整型數(shù)據(jù),(2)整型變量的分類,共六種,有符號基本整型 有符號短整型 有符號長整型 無符號基本整型 無符號短整型 無符號長整型,(signed)int (signed)short (int ) (signed) long (int) unsigned int unsigned short (int) unsigned long (int),注意:括號表示其中的內(nèi)容是可選的.,2019/6/29,17,2.3 整型數(shù)據(jù),整數(shù)類型的有關(guān)數(shù)據(jù):,類型 類型說明符 長度 數(shù)的范圍 基本型 int 2字節(jié) -3276832767 短整型 short 2字節(jié) -215215-1 長整型 long 4字節(jié) -231231-1 無符號整型 unsigned 2字節(jié) 065535 無符號短整型 unsigned short 2字節(jié) 065535 無符號長整型 unsigned long 4字節(jié) 0(232-1),2019/6/29,18,2.3 整型數(shù)據(jù),例如:整數(shù)13在內(nèi)存中實(shí)際存放的情況:,2019/6/29,19,2.3 整型數(shù)據(jù),(3)整型變量的定義: 規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。 例如: int a,b(指定變量、為整型) unsigned short c,d;(指定變量、為無符號短整型) long e,f;(指定變量、為長整型),2019/6/29,20,例2.2 整型變量的定義與使用 #include void main() int a,b,c,d; /*指定、為整型變量* unsigned ; *指定為無符號整型變量* 12;-24;10; ; printf(,); ,說明: 可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算,運(yùn)行結(jié)果: ,,2019/6/29,21,例2.3 整型數(shù)據(jù)的溢出 #include void main() int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b); ,說明:數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納-3276832767范圍內(nèi)的數(shù),無法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。,運(yùn)行結(jié)果: 32767,-32768,2019/6/29,22,在C中,用高位置1來表示負(fù)數(shù),int型占兩個(gè)字節(jié)共16位,32768的二進(jìn)制是10000000,00000000,高位為1,系統(tǒng)會認(rèn)為是負(fù)數(shù),所以32768需要用長型表示,占四個(gè)字節(jié)。最高位就不是1了。(00000000,00000000,10000000,00000000) -32768在內(nèi)存中的表示是10000000,00000000。 過程是:先讀入正值32768(10000000,00000000),再取反(01111111,11111111),再加1(10000000,00000000),2019/6/29,23,2019/6/29,24,2019/6/29,25,2.3 整型數(shù)據(jù),2.3.3 整型常量的類型 (1)一個(gè)整數(shù),如果其值在-32768+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和long int型變量。 (2) 一個(gè)整數(shù),如果其值超過了上述范圍,而在-2147483637+2147483647范圍內(nèi),則認(rèn)為它是為長整型??梢詫⑺x值給一個(gè)long int型變量。,2019/6/29,26,2.3 整型數(shù)據(jù),(3) 如果所用的C版本(如Turbo C)分配給 short int與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度 相同,則它的表數(shù)范圍與int型相同。因此 一個(gè)int型的常量同時(shí)也是一個(gè)short int型 常量,可以賦給int型或short int型變量。,2019/6/29,27,2.3 整型數(shù)據(jù),(4) 一個(gè)整常量后面加一個(gè)字母u或U,認(rèn) 為是unsigned int型,如12345u,在內(nèi)存 中按unsigned int規(guī)定的方式存放(存儲 單元中最高位不作為符號位,而用來存儲 數(shù)據(jù))。如果寫成-12345u,則先將-12345 轉(zhuǎn)換成其補(bǔ)碼53191,然后按無符號數(shù)存 儲。,2019/6/29,28,Unsigned int 占2個(gè)字節(jié)(16位)。 12345二進(jìn)制,-12345二進(jìn)制(補(bǔ)碼),原:,補(bǔ):,Unsigned:,=53191,2019/6/29,29,2.3 整型數(shù)據(jù),(5) 在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是long int型常量。 例如: 123l.432L.0L 用于函數(shù)調(diào)用中。 如果函數(shù)的形參為long int型,則要求實(shí)參也為long int型。,2019/6/29,30,2.4 浮點(diǎn)型數(shù)據(jù),2.4.1浮點(diǎn)型常量的表示方法,兩種表 示形式,小數(shù) 指數(shù),0.123 3e-3,注意:字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù),1e3、1.8e-3、-123e-6、-.1e-3 e3、2.1e3.5、.e3、e,2019/6/29,31,2.4 浮點(diǎn)型數(shù)據(jù),規(guī)范化的指數(shù)形式: 在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊 應(yīng)有一位(且只能有一位)非零的數(shù)字. 例如: 123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e 其中的1.23456e2稱為“規(guī)范化的指數(shù)形式”。,2019/6/29,32,2.4 浮點(diǎn)型數(shù)據(jù),2.4.2 浮點(diǎn)型變量 (1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式 一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4個(gè)字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。,2019/6/29,33,2.4 浮點(diǎn)型數(shù)據(jù),(2) 浮點(diǎn)型變量的分類 浮點(diǎn)型變量分為單精度(float型)、雙精度(double型)和長雙精度型(long double)三類形式。,2019/6/29,34,例2.4 浮點(diǎn)型數(shù)據(jù)的舍入誤差 #include void main() float a,b; a = 123456.789e5; b = a + 20 ; printf(“%fn”,b); ,說明:一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù),運(yùn)行結(jié)果: 123456.789e5,2019/6/29,35,2.4 浮點(diǎn)型數(shù)據(jù),2.4.3 浮點(diǎn)型常量的類型 C編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理。 例如:f = 2.45678 * 4523.65 系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個(gè)雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母f或F(如1.65f, 654.87F),這樣編譯系統(tǒng)就會把它們按單精度(32位)處理。,2019/6/29,36,2.5 字符型數(shù)據(jù),2.5.1 字符常量 (1)用單引號包含的一個(gè)字符是字符型常量 (2)只能包含一個(gè)字符,例,a,A, 1 abc、“a”,2019/6/29,37,2.5 字符型數(shù)據(jù),有些以“”開頭的特殊字符稱為轉(zhuǎn)義字符,n 換行 t 橫向跳格 r 回車 反斜杠 ddd ddd表示1到3位八進(jìn)制數(shù)字 xhh hh表示1到2位十六進(jìn)制數(shù)字,2019/6/29,38,例2.5 轉(zhuǎn)義字符的使用,打印機(jī)上的顯示結(jié)果: fab c gde h jik,2019/6/29,39,2.5 字符型數(shù)據(jù),2.5.2字符變量 字符型變量用來存放字符常量,注意只能放一個(gè)字符。 字符變量的定義形式如下:char c1,c2; 在本函數(shù)中可以用下面語句對c1,c2賦值: c1a;c2 b ; 一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。,2019/6/29,40,2.5 字符型數(shù)據(jù),2.5.3 字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法 一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。,注意: 一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。,2019/6/29,41,例2.6 向字符變量賦以整數(shù)。 #include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); ,說明:在第和第4行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當(dāng)于以下兩個(gè)賦值語句: c1;c2; 因?yàn)閍和b的ASCII碼為97和98,運(yùn)行結(jié)果: 97 98,2019/6/29,42,例2.7 大小寫字母的轉(zhuǎn)換 #include void main() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“c c,c1,c2); ,說明:程序的作用是將兩個(gè)小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。,運(yùn)行結(jié)果: ,2019/6/29,43,2.5 字符型數(shù)據(jù),說明: 有些系統(tǒng)(如Turbo C)將字符變量定義為signed char型。其存儲單元中的最高位作為符號位,它的取值范圍是-128127。如果在字符變量中存放一個(gè)ASCII碼為0127間的字符,由于字節(jié)中最高位為0,因此用%d輸出字符變量時(shí),輸出的是一個(gè)正整數(shù)。如果在字符變量中存放一個(gè)ASCII碼為128255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時(shí),就會得到一個(gè)負(fù)整數(shù)。,2019/6/29,44,2.5 字符型數(shù)據(jù),2.5.4字符串常量 字符串常量是一對雙撇號括起來的字符序列. 合法的字符串常量: “How do you do.”, “CHINA”, “a” , “$123.45” 可以輸出一個(gè)字符串,如 printf(“How do you do.”);,2019/6/29,45,2.5 字符型數(shù)據(jù),是字符常量,”是字符串常量,二者不 同。 如:假設(shè)被指定為字符變量 :char c,c=a; ”a”;c”CHINA”;,結(jié)論:不能把一個(gè)字符串常量賦給一個(gè)字符變量。,2019/6/29,46,規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè) “字符 串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。 規(guī)定以字符作為字符串結(jié)束標(biāo)志。,如:如果有一個(gè)字符串常量” ,實(shí)際上在內(nèi)存中是:,它占內(nèi)存單元不是個(gè)字符,而是個(gè)字符,最后一個(gè)字符為。但在輸出時(shí)不輸出。,2.5 字符型數(shù)據(jù),2019/6/29,47,2.6 變量賦初值,字符串常量 (1)語言允許在定義變量的同時(shí)使變量初始化 如: int a=3; / 指定為整型變量,初值為 float f=3.56; / 指定為浮點(diǎn)型變量,初值為.56 char c= a; / 指定為字符變量,初值為a,2019/6/29,48,2.6 變量賦初值,(2)可以使被定義的變量的一部分賦初值。 如: int a,b,c=5; 表示指定、為整型變量,但只對初始化,c的初值為 (3)如果對幾個(gè)變量賦以同一個(gè)初值, 應(yīng)寫成:int a=3,b=3,c=3; 表示、的初值都是。 不能寫成 int a=b=c=3;,注意:初始化不是在編譯階段完成的而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語句。,2019/6/29,49,2.7 各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算,混合運(yùn)算:整型(包括int,short,long)、浮點(diǎn)型(包括float,double)可以混合運(yùn)算。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算.,說明: 這種類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。,2019/6/29,50,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,2.8.1 運(yùn)算符簡介 的運(yùn)算符有以下幾類: (1)算術(shù)運(yùn)算符 (+ - * / %) (2)關(guān)系運(yùn)算符 (?。?(3)邏輯運(yùn)算符 (!|) (4)位運(yùn)算符 ( |) (5)賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符) (6)條件運(yùn)算符 (?:) (7)逗號運(yùn)算符 (,),(8)指針運(yùn)算符 (*和) (9)求字節(jié)數(shù)運(yùn)算符() (10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符( (類型) ) (11)分量運(yùn)算符(-) (12)下標(biāo)運(yùn)算符( ) (13)其他 (如函數(shù)調(diào)用運(yùn)算符(),2019/6/29,51,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,2.8.2 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 (1)基本的算術(shù)運(yùn)算符: (加法運(yùn)算符,或正值運(yùn)算符。如:、) (減法運(yùn)算符,或負(fù)值運(yùn)算符。如:、) * (乘法運(yùn)算符。如:*) (除法運(yùn)算符。如:) (模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如:的值為)。,2019/6/29,52,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(2) 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性基本的算術(shù)運(yùn)算符: 用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合語法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。 例如: *.5a 是一個(gè)合法的表達(dá)式,2019/6/29,53,語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。 在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。 規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性) 算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇?,即先左后?。,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,2019/6/29,54,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成 所需類型。 一般形式:(類型名)(表達(dá)式) 例如: (double) 將轉(zhuǎn)換成double類型 (int)(x+y) 將x+y的值轉(zhuǎn)換成整型 (float)(5%3) 將5%3的值轉(zhuǎn)換成float型,2019/6/29,55,例2.8 強(qiáng)制類型轉(zhuǎn)換。 #include void() ; ; ; (); printf(“x=%f, i=%dn“,x,i); ,說明:有兩種類型轉(zhuǎn)換,一種是在運(yùn)算時(shí)不必用戶指定,系統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換,如3+6.5。第二種是強(qiáng)制類型轉(zhuǎn)換。當(dāng)自動類型轉(zhuǎn)換不能實(shí)現(xiàn)目的時(shí),可以用強(qiáng)制類型轉(zhuǎn)換。,運(yùn)行結(jié)果: x3.600000, i=3,2019/6/29,56,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(4) 自增、自減運(yùn)算符 作用是使變量的值增或減 如: ,(在使用之前,先使的值加 (減) ,(在使用之后,使的值加( 減),2019/6/29,57,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,i+與+i的區(qū)別: 是先執(zhí)行后,再使用的值; 是先使用的值后,再執(zhí)行。 例如: ; i的值先變成4, 再賦給,j的值均為 ; 先將 i的值3賦給,的值為,然后變?yōu)?2019/6/29,58,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,注意: (1)自增運(yùn)算符(),自減運(yùn)算符(),只能用于變量,而不能用于常量或表達(dá)式, (2)和的結(jié)合方向是“自右至左”。,自增(減)運(yùn)算符常用于循環(huán)語句中使循環(huán)變量 自動加。也用于指針變量,使指針指向下一個(gè)地址,2019/6/29,59,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(5) 有關(guān)表達(dá)式使用中的問題說明 ANSI C并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。 例如:對表達(dá)式 a = f1( )+f2( ) 并不是所有的編譯系統(tǒng)都先調(diào)用f1( ), 然后 調(diào)用f2( )。在有的情況下結(jié)果可能不同。有時(shí)會出 現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎。,2019/6/29,60,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,語言中有的運(yùn)算符為一個(gè)字符,有的運(yùn)算符由 兩個(gè)字符組成 ,為避免誤解,最好采取大家都能理 解的寫法。 例如:不要寫成i+j的形式,而應(yīng)寫成 (i+)+j的形式,2019/6/29,61,2.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,在調(diào)用函數(shù)時(shí),實(shí)參數(shù)的求值順序,標(biāo)準(zhǔn)并無統(tǒng) 一規(guī)定。 例如:的初值為,如果有下面的函數(shù)調(diào)用: printf(,i+) 在有的系統(tǒng)中,從左至右求值,輸出“,”。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左,函數(shù)輸出的是“,”。以上這種寫法不宜提倡, 最好改寫成 j = i+; printf(“%d, %d“, j,i),不要寫出別人看不懂的也 不知道系統(tǒng)會怎樣執(zhí)行程 序,2019/6/29,62,2.9 賦值運(yùn)算符和賦值表達(dá)式,(1)賦值運(yùn)算符 賦值符號“”就是賦值運(yùn)算符,它的作用是 將一個(gè)數(shù)據(jù)賦給一個(gè)變量。如“”的作用 是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常 量賦給變量。也可以將一個(gè)表達(dá)式的值賦 給一個(gè)變量.,2019/6/29,63,2.9 賦值運(yùn)算符和賦值表達(dá)式,(2)類型轉(zhuǎn)換 如果賦值運(yùn)算符兩側(cè)的類型不一致,但都 是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類型 轉(zhuǎn)換。 將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整 型變量時(shí),舍棄浮點(diǎn)數(shù)的小數(shù)部分。 如:為整型變量,執(zhí)行“i=3.56”的結(jié)果是使 的值為,以整數(shù)形式存儲在整型變量中.,2019/6/29,64,2.9 賦值運(yùn)算符和賦值表達(dá)式,將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變, 但以浮點(diǎn)數(shù)形式存儲到變量中 如: 將23賦給float變量,即執(zhí)行23,先 將23轉(zhuǎn)換成2300000,再存儲在中。 將23賦給double型變量,即執(zhí)行23,系統(tǒng)將23補(bǔ)足有效位數(shù)字為2300000000000000,然后以雙精度浮點(diǎn)數(shù)形式存儲到變量中。,2019/6/29,65,2.9 賦值運(yùn)算符和賦值表達(dá)式,將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),截取其前 面7位有效數(shù)字,存放到float變量的存儲單元(4個(gè) 字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。 如:float f;double d=123.456789e100; f=d; 就出現(xiàn)溢出的錯誤。 如果將一個(gè)float型數(shù)據(jù)賦給double變量時(shí),數(shù)值不 變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個(gè)字節(jié)存儲,2019/6/29,66,2.9 賦值運(yùn)算符和賦值表達(dá)式,字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只 占1個(gè)字節(jié),而整型變量為個(gè)字節(jié),因此將 字符數(shù)據(jù)(個(gè)二進(jìn)位)放到整型變量存儲 單元的低位中。,2019/6/29,67,第一種情況:低位對應(yīng)、高位補(bǔ)零 若所用系統(tǒng)將字符處理為無符號字符類型,或程序已將字符變量定義為unsigned char型,則將字符的位放到整型變量低位,高位補(bǔ)零。例如: 將字符376賦給int型變量,第二種情況:符號擴(kuò)展 若所用系統(tǒng)(如Turbo C+)將字符處理為帶符號(signed char)時(shí),若字符最高位為,則整型變量高位補(bǔ);若字符最高位為,則高位全補(bǔ)。這稱為“符號擴(kuò)展”,這樣做的目的是使數(shù)值保持不變,如變量(字符376)以整數(shù)形式輸出為,的值也是。,2019/6/29,68,2.9 賦值運(yùn)算符和賦值表達(dá)式,將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char型變 量時(shí),只將其低8位原封不動地送到char型變量(即 截?cái)啵?。例如:int i=289;char c=a;c=i;,c的值為33, 如果用“%c”輸 出c,將得到字符“!” !的ASCII碼為33。,賦值情況 :,2019/6/29,69,2.9 賦值運(yùn)算符和賦值表達(dá)式,將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時(shí),要進(jìn)行符號擴(kuò)展,將整型數(shù)的16位送到long型低16位中: 如果int型數(shù)據(jù)為正值(符號位為),則long型變量的高16位補(bǔ); 如果int型變量為負(fù)值(符號位為),則long型變量的高16位補(bǔ),以保持?jǐn)?shù)值不改變。 反之,若將一個(gè)long型數(shù)據(jù)賦給一個(gè)int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截?cái)啵?2019/6/29,70,2.9 賦值運(yùn)算符和賦值表達(dá)式,例如:int a;long b;a=b 賦值如 :,如果65536,則賦值后值為。,2019/6/29,71,2.9 賦值運(yùn)算符和賦值表達(dá)式,將unsigned int型數(shù)據(jù)賦給long int型變量時(shí),不 存在符號擴(kuò)展問題,只需將高位補(bǔ)即可。將一個(gè) unsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非 unsigned型整型變量(例如:unsigned int -int,unsigned long-long,unsigned short -short),將unsigned型變量的內(nèi)容原樣送到非 unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的 范圍,則會出現(xiàn)數(shù)據(jù)錯誤。,2019/6/29,72,2.9 賦值運(yùn)算符和賦值表達(dá)式,例如:unsigned int 65535; int b;;,將整個(gè)送到中,由于是int,第位是符號位, 因此b成了負(fù)數(shù)。根據(jù)補(bǔ)碼知識可知,的值為-1, 可以用printf(%d,b);來驗(yàn)證。,將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變 量,也是原樣照賦(符號位也作為數(shù)值一起傳送)。,2019/6/29,73,例2.9 有符號數(shù)據(jù)傳送給無符號變量。 #include void main() unsigned ; int ; ; print(n,); ,說明:“%u”是輸出無符號數(shù)時(shí)所用的格式符。如果為正值,且在32767之間,則賦值后數(shù)值不變。,運(yùn)行結(jié)果: ,2019/6/29,74,2.9 賦值運(yùn)算符和賦值表達(dá)式,(3) 復(fù)合的賦值運(yùn)算符 在賦值符“”之前加上其他運(yùn)算符,可以構(gòu)成復(fù) 合的運(yùn)算符。 例如: 等價(jià)于 * 等價(jià)于 *() 等價(jià)于 ,2019/6/29,75,2.9 賦值運(yùn)算符和賦值表達(dá)式,為便于記憶,可以這樣理解: a += b (其中a為變量,b為表達(dá)式) a += b(將有下劃線的“a+”移到“=”右側(cè)) |_ a = a + b (在“=”左側(cè)補(bǔ)上變量名a),注意:如果是包含若干項(xiàng)的表達(dá)式,則相當(dāng)于它有 括號。 如: x %= y+3 x %= (y+3) |_ x = x %(y+3)(不要錯寫成x=x%y+3),凡是二元(二目)運(yùn)算符,都可以與賦值符一起組合成復(fù)合賦值符。,語言規(guī)定可以使用種復(fù)合賦值運(yùn)算符: ,*,|,2019/6/29,76,2.9 賦值運(yùn)算符和賦值表達(dá)式,(4) 賦值表達(dá)式 由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接 起來的式子稱為“賦值表達(dá)式”。 一般形式為: 例如: “5”是一個(gè)賦值表達(dá)式,2019/6/29,77,2.9 賦值運(yùn)算符和賦值表達(dá)式,對賦值表達(dá)式求解的過程是: 求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值; 賦給賦值運(yùn)算符左側(cè)的變量。 例如: 賦值表達(dá)式“=3*5”的值為15,執(zhí)行表達(dá)式后,變量a的值也是15。,注意: 一個(gè)表達(dá)式應(yīng)該有一個(gè)值,2019/6/29,78,2.9 賦值運(yùn)算符和賦值表達(dá)式,左值 (lvalue) : 賦值運(yùn)算符左側(cè)的標(biāo)識符 變量可以作為左值; 而表達(dá)式就不能作為左值(如a+b);賦值表達(dá)式可以; 常變量也不能作為左值,,右值 (lvalue) :出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式 左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值 都可以作為右值。,2019/6/29,79,2.9 賦值運(yùn)算符和賦值表達(dá)式,賦值表達(dá)式中的“表達(dá)式”,又可以是一個(gè)賦值表 達(dá)式。例如: a=(b=5),分析:括弧內(nèi)的“b=5”是一個(gè)賦值表達(dá)式,它 的值等于5。執(zhí)行表達(dá)式“a=(b=5)”相當(dāng)于執(zhí)行 “b=5”和“ab”兩個(gè)賦值表達(dá)式。 賦值運(yùn)算符 按照“自右而左”的結(jié)合順序,因此,“(b5)” 外面的括弧可以不要,即“a=(b=5)”和“a=b=5” 等價(jià)。,2019/6/29,80,2.9 賦值運(yùn)算符和賦值表達(dá)式,請分析下面的賦值表達(dá)式(a=3*5)=4*3,分析:先執(zhí)行括弧內(nèi)的運(yùn)算,將15賦給a,然后執(zhí)行 4*3的運(yùn)算,得12,再把12賦給a。最后a的值為12, 整個(gè)表達(dá)式的值為12。可以看到(a=3*5)出現(xiàn)在賦 值運(yùn)算符的左側(cè),因此賦值表達(dá)式(a=3*5)是左值,注意:在對賦值表達(dá)式(a=3*5)求解后,變量a得到值 15執(zhí)行(a=3*5)=4*3時(shí),實(shí)際上是將4*3的積12賦給變 量a,而不是賦給3*5。,不能寫成: a=3*5=4*3,2019/6/29,81,2.9 賦值運(yùn)算符和賦值表達(dá)式,賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。 如:a+=a-=a*a;a初值為12,分析:此賦值表達(dá)式的求解步驟如下 先進(jìn)行“*”的運(yùn)算, 它相當(dāng)于*,a的值為144132。 再進(jìn)行“”的運(yùn)算,相當(dāng)于=a+(-132),a的值為 132-132-264。,2019/6/29,82,2.9 賦值運(yùn)算符和賦值表達(dá)式,將賦值表達(dá)式作為表達(dá)式的一種,使賦值操作不僅可以出現(xiàn)在賦值語句中,而且可以以表達(dá)式形式出現(xiàn)在其他語句(如輸出語句、循環(huán)語句等)中。 如:printf(“%d“,a=b);,分析:如果b的值為3, 則輸出a的值(也是表達(dá)式a=b的值)為3。在一個(gè)語句中完成了賦值和輸出雙重功能。,2019/6/29,83,2.10 逗號運(yùn)算符和逗號表達(dá)式,逗號運(yùn)算符:將兩個(gè)表達(dá)式連接起來,又稱為“順序求 值運(yùn)算符” 如:5,,一般形式: 表達(dá)式,表達(dá)式,求解過程: 先求解表達(dá)式,再求解表達(dá)式。整個(gè)逗號表達(dá)式的值是表達(dá)式的值。,逗號表達(dá)式 的值為14,2019/6/29,84,2.10 逗號運(yùn)算符和逗號表達(dá)式,例:逗號表達(dá)式*5,*,分析:賦值運(yùn)算符的優(yōu)先級別高于逗號運(yùn)算符, 因 此應(yīng)先求解*5。,的值為5,然后求解*,得。整個(gè)逗號表達(dá)式的值為。,一個(gè)逗號表達(dá)式又可以與另一個(gè)表達(dá)式組成一 個(gè)新的逗號表達(dá)式 如:(*,*),a+5 先計(jì)算出的值等于,再進(jìn)行*的運(yùn)算得60(但值未變,仍為15),再進(jìn)行得,即整個(gè)表達(dá)式的值為。,2019/6/29,85,2.10 逗號運(yùn)算符和逗號表達(dá)式,逗號表達(dá)式的一般形式可以擴(kuò)展為 表達(dá)式,表達(dá)式,
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)合同和技術(shù)承包
- 個(gè)人勞務(wù)分包合同簡本
- 綠化護(hù)坡施工方案
- 產(chǎn)品測評表-產(chǎn)品用戶反饋收集
- 生物化學(xué)分析實(shí)驗(yàn)技術(shù)練習(xí)題集
- 商場餐飲經(jīng)營商鋪?zhàn)赓U合同
- 農(nóng)民宅基地轉(zhuǎn)讓合同
- 臨汾低溫冷庫施工方案
- 杭州室內(nèi)球場施工方案
- 鋁合金飛廊及蓋板施工方案
- 2025年電力人工智能多模態(tài)大模型創(chuàng)新技術(shù)及應(yīng)用報(bào)告-西安交通大學(xué)
- 學(xué)習(xí)雷鋒主題班會雷鋒日學(xué)習(xí)雷鋒精神-
- 事故隱患內(nèi)部舉報(bào)獎勵制度
- 2020-2024年安徽省初中學(xué)業(yè)水平考試中考?xì)v史試卷(5年真題+答案解析)
- 上春山二部合唱鋼琴伴奏正譜
- 工業(yè)氣體企業(yè)公司組織架構(gòu)圖職能部門及工作職責(zé)
- 全員安全風(fēng)險(xiǎn)辨識評估活動實(shí)施方案(8頁)
- 小升初個(gè)人簡歷表
- 電工每日巡查簽到表
- 小學(xué)二年級心理健康教育-打開心門交朋友-(11張PPT)ppt課件
- (完整版)CNC84操作手冊
評論
0/150
提交評論