第三章數(shù)據(jù)類型、運(yùn)算符、表達(dá)式_第1頁
第三章數(shù)據(jù)類型、運(yùn)算符、表達(dá)式_第2頁
第三章數(shù)據(jù)類型、運(yùn)算符、表達(dá)式_第3頁
第三章數(shù)據(jù)類型、運(yùn)算符、表達(dá)式_第4頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 數(shù)據(jù)類型、運(yùn)算符、表達(dá)式C語言的詞法記號(hào) C語言的數(shù)據(jù)類型常量與變量各類數(shù)值間的混合運(yùn)算 運(yùn)算符和表達(dá)式本章介紹C語言的基礎(chǔ),主要包括:數(shù)據(jù)類型運(yùn)算符和表達(dá)式均是程序設(shè)計(jì)的基本知識(shí)為什么討論這些知識(shí)?通常程序要對(duì)數(shù)據(jù)進(jìn)行操作處理:處理的對(duì)象是數(shù)據(jù)通過運(yùn)算符和表達(dá)式進(jìn)行操作【例3_1】計(jì)算圓的面積,半徑為 5 cm。 程序如下:main( ) float r, area ; r=5 ; area=3.14*r*r; printf (%fn , area) ; 運(yùn)算結(jié)果是輸出圓的面積:78.500000程序中用到的數(shù)據(jù):r、area、5、3.14對(duì)數(shù)據(jù)進(jìn)行的運(yùn)算:* 、=分析:計(jì)算機(jī)操作處

2、理時(shí),要完成以下工作:在內(nèi)存中給半徑 r 和運(yùn)算結(jié)果 area 開辟存儲(chǔ)空間,存放它們的值。應(yīng)該留多大的地方來存放它們的值?數(shù)據(jù) 5 和 3.14 與 r 、area 不同,它們是在編寫程序時(shí)就給出確定的值,在運(yùn)算過程中不會(huì)改變。這樣的數(shù)計(jì)算機(jī)怎么處理?對(duì)整數(shù) 5 和小數(shù)3.14 ,計(jì)算機(jī)存放時(shí)是否有區(qū)別?涉及數(shù)據(jù)類型的基本知識(shí)3.1 C語言的詞法記號(hào)引例: /*求得并輸出兩數(shù)相加之和*/#include int Add(int a, int b)return (a + b);void main( ) /*主函數(shù)*/ int x, y, sum = 0;scanf(%d%d, &x, &y);

3、 /*輸入兩個(gè)整型數(shù)x和y*/sum = Add(x, y); /*調(diào)用函數(shù)Add求x和y相加之和*/printf(sum = %dn, sum); /*輸出x和y相加之和*/C語言的詞法單位可分成6類:1、關(guān)鍵字(Keyword)又稱為保留字(37個(gè))見P378附錄C c語言預(yù)先規(guī)定的具有固定含義的一些單詞如:數(shù)據(jù)類型修飾符int, 控制語句return等 2、標(biāo)識(shí)符(Identifier)系統(tǒng)預(yù)定義標(biāo)識(shí)符,main,printf、include等 用戶自定義標(biāo)識(shí)符,Add, x, y 等3、運(yùn)算符(Operator)34種,詳見P378附錄D + 、 =4、分隔符(Separator) 空

4、格、回車/換行、逗號(hào)等 5、其它符號(hào) 大花括號(hào)“”和“”通常用于標(biāo)識(shí)函數(shù)體或者一個(gè)語句塊 “/*”和“*/”or“/”是程序注釋所需的定界符 “#”、 等6、數(shù)據(jù)(Data)變量(Variable)常量(Constant) 1、關(guān)鍵字:又稱保留字,指具有特定含義、專門用作系統(tǒng)的特定成分的一類標(biāo)識(shí)符。不能用作一般標(biāo)識(shí)符,即不允許用作變量名或函數(shù)名等。 標(biāo)準(zhǔn)語言中共有7個(gè)關(guān)鍵字,按用途分為類:數(shù)據(jù)類型:如char int等 存儲(chǔ)類:如auto return等流程控制:如if else switch等 運(yùn)算符:sizeof注意關(guān)鍵字C語言的關(guān)鍵字都是小寫的。例如else是關(guān)鍵字,但ELSE就不是關(guān)鍵

5、字37個(gè)關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義)auto break case char constcontinue default do double elseenum extern float for gotoif inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while _bool_Complex _Imaginary2、標(biāo)識(shí)符定義:用來標(biāo)識(shí)變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線

6、組成,且第一個(gè)字母必須是字母或下劃線大小寫敏感不能使用關(guān)鍵字長(zhǎng)度:最長(zhǎng)32個(gè)字符命名原則:見名知意不宜混淆 如l與I, o與0例:判斷下列標(biāo)識(shí)符號(hào)合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33char$123ab3、運(yùn)算符和表達(dá)式(34種、15個(gè)優(yōu)先級(jí))C運(yùn)算符算術(shù)運(yùn)算符:(+ - * / % + -)關(guān)系運(yùn)算符:( = !=)邏輯運(yùn)算符:(! & |)位運(yùn)算符 :( | &)賦值運(yùn)算符:(= 及其擴(kuò)展)條件運(yùn)算符:(?:)逗號(hào)運(yùn)算符:(,)指

7、針運(yùn)算符:(* &)求字節(jié)數(shù) :(sizeof)強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(. -)下標(biāo)運(yùn)算符:()其它 :(( ) -)C數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef數(shù)值類型字符類型char枚舉類型enum整 型實(shí) 型單精度型float雙精度型double短整型short長(zhǎng)整型long整型int數(shù)組結(jié)構(gòu)體struct共用體union數(shù)據(jù)類型決定:1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2. 數(shù)據(jù)取值范圍3. 可進(jìn)行的操作3.2 C的數(shù)據(jù)類型數(shù)據(jù)是操作的對(duì)象,數(shù)據(jù)類型是數(shù)據(jù)的外在表現(xiàn)形式,常見類型如下:3.2.1 基本數(shù)據(jù)類型整型1、整型數(shù)據(jù)的分類: 大的方面分有符號(hào)數(shù)(sign

8、ed)和無符號(hào)數(shù)(unsigned)兩種類型。 又根據(jù)整型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)(或者根據(jù)整型數(shù)據(jù)能表示的數(shù)的范圍大?。┓譃椋?基本型 int 短整型 short int 長(zhǎng)整型 long int 這樣一共組合成6種. 不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,Turbo C 2.0為一個(gè)int型數(shù)據(jù)在內(nèi)存中分配2個(gè)字節(jié)的存儲(chǔ)單元。VC+ 6.0則分配4個(gè)字節(jié)。2、整型數(shù)在內(nèi)存中的存放和表示范圍:整數(shù)類型 所占位數(shù) 定義類型字 表示數(shù)的范圍 有符號(hào) 基本型 16int -32768 +32767 短整型 16short int -32768 +32767長(zhǎng)整型 32long int -

9、231 (231-1 )無符號(hào)基本型 16unsigned int 0 65535 短整型 16unsigned short 0 65535 長(zhǎng)整型 32unsigned long 0 (232-1)3、整型數(shù)據(jù)的溢出 “溢出”是指運(yùn)算結(jié)果過大,而超出了表示范圍的一種錯(cuò)誤狀態(tài)。C編譯程序不檢測(cè)這種錯(cuò)誤。例 整型數(shù)據(jù)的溢出#include void main() int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b);說明: 數(shù)值是以補(bǔ)碼表示的。 int型范圍-3276832767, 加1發(fā)生“溢出”。 改變辦法:預(yù)先定義b為long類型 1、實(shí)型(浮點(diǎn)型)程

10、序中有兩種表示法3.2.2基本數(shù)據(jù)類型 實(shí)型數(shù)據(jù)規(guī)范化的指數(shù)形式: 在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)前的數(shù)字為0,小數(shù)點(diǎn)后第1位數(shù)字不為0的表示形式稱為規(guī)范化的指數(shù)形式。 例如: 123.456 0.123456e3稱為“規(guī)范化的指數(shù)形式”。(1)十進(jìn)制小數(shù)形式:.123 23.1(2) 指數(shù)形式:123e3 1.234e34 (e前必須有數(shù)字,e后指數(shù)必須為整數(shù))2實(shí)型數(shù)據(jù)的類型 單精度實(shí)型數(shù)據(jù) float, 分配4 Byte雙精度實(shí)型數(shù)據(jù) double,分配 8 Byte3實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式 系統(tǒng)把一個(gè)實(shí)型數(shù),分成小數(shù)部分和指數(shù)部分,分別存放采用規(guī)范化的指數(shù)方式示,如:類型

11、類型符Byte絕對(duì)值的范圍有效數(shù)字單精度型float4-3.410-37 3.4103867 位雙精度型double8-1.7*10-307 1.7103081516位數(shù)符小數(shù)指數(shù)符號(hào)指數(shù)+0.123456-2小數(shù)部分指數(shù)部分 實(shí)型數(shù)據(jù)只能精確表示有限位。 當(dāng)實(shí)數(shù)真值超出表示法精度時(shí),系統(tǒng)將進(jìn)行四舍五入保留相應(yīng)的有效數(shù)字。4、實(shí)型數(shù)據(jù)的誤差例 浮點(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ù)字是無意義的,

12、并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù)a=12345678848.000000b=12345678848.0000003.2.3基本數(shù)據(jù)類型 字符型數(shù)據(jù) 字符型:char 如: 一般用8位來存放一個(gè)字符如:普通字符 A 存放的是該字符的ASCII碼值(即整數(shù) ) 可把字符型看作一種特殊的整型 10000110a97例如:字符變量c1存放字符a,是存放973.3常量和變量主要內(nèi)容:常量變量3.3.1 常量 在運(yùn)行程序的過程中值保持不變的量1整型常量(1)表示方法 十進(jìn)制:09 :如100 -8 0 +123八進(jìn)制:07,以 0開頭。如010

13、 024 0100 073十六進(jìn)制:09,AF/af,以 0 x或 0X 開頭如0 x38 0 x10 0X10 0XFF 0 x0a(2)整型常量的類型:根據(jù)值大小默認(rèn)類型。整型常量后面加l或L,則認(rèn)為是long int型 例如:123L、0L、432l、0 x100l2. 實(shí)型常量 (1)實(shí)型常量的表示方法1、十進(jìn)制小數(shù)形式:.123 23.12、 指數(shù)形式:123e3 1.234e34(e前必須有數(shù)字,e后指數(shù)必須為整數(shù))(2) 類型在數(shù)的后面加字母 f 或 F,就為單精度數(shù),否則處理成雙精度數(shù)。3. 字符型常量 可視字符常量 單引號(hào)括起來的單個(gè)可視字符例如:a、A 、+ 、3、 等 轉(zhuǎn)

14、義字符常量單引號(hào)括起來的 與可視字符組合,例如: 含 義 ASCII代碼 換行,將當(dāng)前位置移到下一行開頭 10 水平制表(跳到下一個(gè)Tab位置) 9 退格,將當(dāng)前位置移到前一列 8 回車,將當(dāng)前位置移到本行開頭 13 換頁,將當(dāng)前位置移到下頁開頭 12 a 發(fā)出鈴聲 7 代表一個(gè)反斜杠字符“”92 代表一個(gè)單撇號(hào)字符 39 代表一個(gè)雙撇號(hào)字符34 到位八進(jìn)制數(shù)所代表的字符 到位十六進(jìn)制數(shù)所代表的字符 例3_2轉(zhuǎn)義字符的使用#include void main() printf ( ab ct derftgn); printf (htibbj kn); 程序運(yùn)行輸出的運(yùn)行結(jié)果: 1 2 3 4

15、5 6 7 8 9 10 11 f a b c g d e h j i k顯示屏上的運(yùn)行結(jié)果:(屏幕也顯示了,速度快未看清時(shí),新代替舊) f g d e *r回到本行開頭,自此輸出字符 (包括空格和跳格經(jīng)過的位置)將替代原有的字符*/ h j k4. 字符串常量 用雙引號(hào)括起的一個(gè)字符序列例如:ABC、123、a、 nt “ nGood morning字符串常量的長(zhǎng)度 :所包含的字符個(gè)數(shù) 字符串常量的存儲(chǔ)方式:規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè) “字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。規(guī)定以字符作為字符串結(jié)束標(biāo)志。 如:如果有一個(gè)字符串常量” ,實(shí)際上在內(nèi)存中是:CHINA0 它

16、占內(nèi)存單元不是個(gè)字符,而是個(gè)字符,最后一個(gè)字符為。但在輸出時(shí)不輸出。” 是字符常量, “a”是字符串常量,二者不同。 如:假設(shè)被指定為字符變量 :char c c= a; “a” ;c “CHINA”; 結(jié)論:不能把一個(gè)字符串常量賦給一個(gè)字符變量。a0“a”5. 符號(hào)常量 以標(biāo)識(shí)符來代表的常量事先編譯預(yù)處理命令define定義編譯時(shí)先由系統(tǒng)替換為它所代表的常量,再進(jìn)行編譯例如: #define LEN 2.5main( ) float a,b; a= 2*3.14 *LEN; b=3.14*LEN*LEN; printf(a=%f,b=%fn,a,b);定義符號(hào)常量使用符號(hào)常量編譯前系統(tǒng)進(jìn)行替

17、換3.3.2 變量 1. 變量的有關(guān)概念在程序運(yùn)行過程中,其值可以改變,稱為變量,它代表一個(gè)有名字的、具有特定屬性的一個(gè)存儲(chǔ)單元。變量用標(biāo)識(shí)符表示,稱為變量名。系統(tǒng)為變量分配存儲(chǔ)單元,存儲(chǔ)變量的值。 編寫程序時(shí)通過變量名來存、取變量值。變量名實(shí)際上是以一個(gè)名字代表的一個(gè)存儲(chǔ)地址,在對(duì)程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù)。a510變量值為變量分配的存儲(chǔ)單元變量名例如:有變量a它的值是5102. 變量定義變量定義的一般格式: 數(shù)據(jù)類型 變量1,變量2,;決定:1.占內(nèi)存的字節(jié)數(shù)2.數(shù)的取值范圍合法標(biāo)識(shí)符

18、先定義,后使用例如:int i; /* i為整型變量*/short c,d,e; /*c,d,e為短整型*/unsigned long p,g; /* p,g為無符號(hào)長(zhǎng)整型 */float x,y; /* x,y為單精度型*/double z; /* z為雙精度型*/char ch1,ch2; /* ch1,ch2為字符型*/ main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);變量定義可執(zhí)行語句main() int a,b=2; a=1; float data; data=(a+b)*1.2;

19、printf(“data=%fn”,data);例3_3變量定義位置:一般放在函數(shù)開頭3. 變量的初始化:int i,j;double s;i=4;j=4*i-11;s=0.02*1000.0; 方法1 先定義變量,再賦值 方法2 定義變量的同時(shí),賦初值int i=0;i=i+2;注意:若對(duì)幾個(gè)變量賦同一個(gè)值,不能寫成 int a=b=c=5;而應(yīng)寫成 int a=5, b=5, c=5;變量定義和賦初值的作用編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元.地址int a=1, b=-3,c ;abc2字節(jié)2字節(jié)2字節(jié)地址地址.內(nèi)存1-3隨機(jī)數(shù) 如果一個(gè)變量在一個(gè)表達(dá)式中使用,那么只有該變量初

20、始化后,表達(dá)式才能產(chǎn)生一個(gè)有意義的結(jié)果。 int i=0;i=i+2;int i;i=i+2;表達(dá)式i=i+2沒有意義,因?yàn)閕 沒有初始化表達(dá)式i=i+2有意義,因?yàn)閕 已經(jīng)初始化變量在使用之前一定要有明確的值例: int student; stadent=19; /Undefined symbol statent in function main4. 變量的使用:先定義后使用編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元.地址int a=1, b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址.內(nèi)存1-3隨機(jī)數(shù)變量概念:其值可以改變的量變量名與變量值變量定義的一般格式: 數(shù)據(jù)類型 變量1,變量2

21、,變量n;變量初始化:定義時(shí)賦初值 例: int a,b,c; float data;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標(biāo)識(shí)符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;變量的使用:先定義,后使用例1 int student; stadent=19; /Undefined symbol statent in function main 例2 float a,b,c; c=a%b; /Illegal use of floating point in function main 變量定義位置:一

22、般放在函數(shù)開頭main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);變量定義可執(zhí)行語句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);3.4 各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算 doublefloatlongunsignedintchar,short低高運(yùn)算對(duì)象類型不同時(shí)轉(zhuǎn)換intintfloatfloatdoubledoublefloatdouble10+a +i*f - d/l例 int i; floa

23、t f; double d; long l;低級(jí)別轉(zhuǎn)換為高級(jí)別隱式類型轉(zhuǎ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)算.3.5運(yùn)算符和表達(dá)式(34種、15個(gè)優(yōu)先級(jí))P378附錄DC運(yùn)算符算術(shù)運(yùn)算符:(+ - * / % + -)關(guān)系運(yùn)算符:( = !=)邏輯運(yùn)算符:(! & |)位運(yùn)算符 :( | &)賦值運(yùn)算符:(= 及其擴(kuò)展)條件運(yùn)算符:(?:)逗號(hào)運(yùn)算符:(,)指針運(yùn)算符:(* &)求字節(jié)數(shù) :(sizeof)強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(. -)下標(biāo)運(yùn)算符:()

24、其它 :(( ) -)學(xué)習(xí)運(yùn)算符應(yīng)注意:運(yùn)算符功能與運(yùn)算量關(guān)系要求運(yùn)算量個(gè)數(shù)要求運(yùn)算量類型運(yùn)算符優(yōu)先級(jí)別結(jié)合方向結(jié)果的類型3.5.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式(1)基本算術(shù)運(yùn)算符: + - * / %結(jié)合方向:從左向右優(yōu)先級(jí): - -* / % - + - (2) (3) (4)說明:“-”可為單目運(yùn)算符時(shí),右結(jié)合性兩整數(shù)相除,結(jié)果為整數(shù)%要求兩側(cè)均為整型數(shù)據(jù)例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 () (2)

25、 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 顯式轉(zhuǎn)換一般形式:(類型名)(表達(dá)式)例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 說明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 結(jié)果:x=3.600000,i=3精度損失問題較高類型向較低類型轉(zhuǎn)換時(shí)可能發(fā)生(3)自增、自減運(yùn)算符+ -作用:使變量值加1或減1種類:前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1)例 j=3; k

26、=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4(3)自增、自減運(yùn)算符+ -作用:使變量值加1或減1種類:前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1)說明:+ - 不能用于常量和表達(dá)式,如5+,(a+b)+ -結(jié)合方向: 自右向左優(yōu)先級(jí):- + - -* / % -+ - (2) (3) (4)例 -i+ -(i

27、+) i=3; printf(“%d”,-i+); /-3 例 j+k; (j+)+k;例 -i+ i=3; printf(“%d”,-i+); 注意:不提倡寫成i+j的形式,而應(yīng)寫成 (i+)+j的形式 算元 符號(hào)樣例含義結(jié)合性優(yōu)先級(jí)二元= x=2.5在變量x中保存數(shù)值2.5從右向左14注意:賦值運(yùn)算符的左操作數(shù)必須是變量(不能是常量或表達(dá)式)一般地,右操作數(shù)的類型應(yīng)與變量的類型相匹配。3.5.2 賦值運(yùn)算符和賦值表達(dá)式(1)賦值運(yùn)算符作用:將右邊的值賦給左邊的變量。 若賦值運(yùn)算符的兩個(gè)操作數(shù)類型不一致,編譯系統(tǒng)則右操作數(shù)的類型轉(zhuǎn)換為變量的類型,然后再賦值。 將較短類型轉(zhuǎn)換為較長(zhǎng)類型是安全操

28、作。反之,可能安全也可能不安全。int i;double s;i=3.56;s=3;不安全,截去小數(shù)部分安全,大多數(shù)int類型均可用double類型精確表示(2) 賦值運(yùn)算符中的類型轉(zhuǎn)換例:2. 整型數(shù)據(jù)賦給實(shí)型變量,數(shù)值不變,但按實(shí)數(shù)形式存放. 1. 將實(shí)型數(shù)據(jù)(無論單,雙精度)賦給整型變量時(shí),舍棄小數(shù).4. 將intlong int, 進(jìn)行符號(hào)擴(kuò)展。 即: 符號(hào)擴(kuò)展, 低16位long 的低16位。5. long int int 則高16位截?cái)唷?. 字符型數(shù)據(jù)賦給整型變量時(shí):(2)字符帶符號(hào)整型變量,則字符高位擴(kuò)展。(1)字符無符號(hào)整型變量,則存入低8位,高8位補(bǔ)零。6. 將unsign

29、ed int 型long int高位補(bǔ)0。而位數(shù)相同部分直接賦值 unsigned int int unsigned long long unsigned short short原值傳送,但數(shù)據(jù)大小不能超值。 如: unsigned int a=65535; int b; b=a;則越界。7. 非unsigned 型長(zhǎng)度相同的unsigned型數(shù)據(jù),原樣傳送(包括符號(hào)位)總體規(guī)律:(1)較短類型轉(zhuǎn)換為較長(zhǎng)類型是安全操作,但要考慮符號(hào)擴(kuò)展。(2)較長(zhǎng)類型轉(zhuǎn)換為較短類型要發(fā)生截?cái)?,可能安全也可能不安全。float f;double d=123.456789e100; f=d;不安全,溢出錯(cuò)誤,結(jié)果

30、無意義。但并不檢測(cè)錯(cuò)誤不同類型的浮點(diǎn)型數(shù)據(jù)之間的賦值:double型數(shù)據(jù)賦給float變量:截取前7位有效數(shù)字,且要避免溢出float型數(shù)據(jù)賦給double變量:安全例:int i=289;char c;c=i;不安全,i的值超出char c表示范圍,只轉(zhuǎn)換了char 能夠表示的較低的位(低8位),結(jié)果無意義。 整型數(shù)據(jù)賦值給字符型變量icc=3300 00 00 01 00 10 00 01 00 10 00 01 例:int a;long b8;a=b;安全, 8在int表示范圍內(nèi)例:int a;long b65536;a=b;不安全, b的值超出int a表示范圍,只轉(zhuǎn)換了int 能夠表

31、示的較低的位(低16位),結(jié)果無意義。 a=000 00 00 00 00 00 00 0000 00 00 00 00 00 00 0100 00 00 00 00 00 00 00例:unsigned a;int b = -1;a=b;不安全,負(fù)數(shù)均不可用unsigned表示,結(jié)果無意義。 ba-1a=6553511 11 11 11 11 11 11 1111 11 11 11 11 11 11 11例:(3)復(fù)合賦值運(yùn)算符在賦值符“”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。例如: 等價(jià)于 * 等價(jià)于 *() 等價(jià)于 以“”為例來說明,它相當(dāng)于使進(jìn)行一次自加()的操作。即先使加,再賦給。=、+=、- =、*=、/=、%= =、 &=、 =、 |=注意:如果“=”右側(cè)是包含若干項(xiàng)的表達(dá)式,則相當(dāng)于它有括號(hào)。如: x %= y+3 x %= (y+3) |_ x = x %(y+3)(不要錯(cuò)寫成x=x%y+3) 語言規(guī)定可以使用種復(fù)合賦值運(yùn)算符:,*,| 復(fù)合賦值運(yùn)算符的結(jié)合性是從右到左。 如: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-13

溫馨提示

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