第02章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第1頁
第02章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第2頁
第02章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第3頁
第02章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第4頁
第02章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第5頁
已閱讀5頁,還剩50頁未讀 繼續(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á)式 本章教學(xué)目的: 熟練掌握C程序中經(jīng)常用到的常量、變量、基本數(shù)據(jù)類型、運(yùn)算符、表達(dá)式等的用法 。本章教學(xué)重點(diǎn): 常量和變量、整型、實(shí)型、字符型、算術(shù)運(yùn)算符和算術(shù)表達(dá)式、賦值運(yùn)算符和賦值表達(dá)式。本章教學(xué)難點(diǎn): 變量、數(shù)據(jù)類型、數(shù)據(jù)的輸入輸出、不同數(shù)據(jù)類型間的混合運(yùn)算、自增自減運(yùn)算符。本章作業(yè): 教材第18頁 2.1的1、2、3題、2.2的1、2、3題。 C語言的數(shù)據(jù)類型語言的數(shù)據(jù)類型 常量和變量常量和變量 整形、實(shí)型和字符型數(shù)據(jù)整形、實(shí)型和字符型數(shù)據(jù) 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式 賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 其他運(yùn)算符和表達(dá)式其他

2、運(yùn)算符和表達(dá)式 數(shù)據(jù)類型空類型指針類型基本類型整型字符型枚舉類型有符號(hào)整型無符號(hào)整型實(shí)型單精度實(shí)型雙精度實(shí)型構(gòu)造類型數(shù)組類型結(jié)構(gòu)體類型共用體類型 常量:程序運(yùn)行過程中,其值不能被改變的量稱為常量。 常量的分類: 整型常量:12,0,-3 實(shí)型常量:4.6, -5.89 字符常量: a,A,#,3 符號(hào)常量:用一個(gè)標(biāo)識(shí)符代表一個(gè) 常量。例如若在程序開始有這樣的預(yù)處理命令:#define N 10,那么C預(yù)處理程序會(huì)將程序中所有的N用10代替。在程序運(yùn)行過程中,其值可以被改變的量稱為變量變量。在使用一個(gè)變量前,必須先定義該變量,就是為該變量起個(gè)名字,并聲明它的數(shù)據(jù)類型。用來標(biāo)識(shí)變量名(或符號(hào)常量名

3、、函數(shù)名、數(shù)組名、類型名、文件名)的有效字符序列稱為標(biāo)識(shí)符標(biāo)識(shí)符。標(biāo)識(shí)符只能由英文字母、數(shù)字、下劃線三種字符組成,并且第一個(gè)字符必須是字母或下劃線。 注意注意,大寫英文字母和小寫英文字母是不同的字符,例如aver和Aver是兩個(gè)不同的變量名。變量名一般用小寫英文字母。變量定義的一般格式: 存儲(chǔ)類型存儲(chǔ)類型 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名1, 變量名變量名2; 例如,int sum, number, a,b;在定義變量的同時(shí)對(duì)變量進(jìn)行賦初值的操作稱為變量初始化。變量初始化的一般格式:存儲(chǔ)類型存儲(chǔ)類型 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名1=初值初值1, 變量名變量名2=初值初值2;例如,float r

4、adius=2.5, length=3.6, area; 整型常量即整常數(shù),在語言中,整型常量可用三種形式表示:(1)十進(jìn)制,例如10、36、0、-789。(2)八進(jìn)制(以數(shù)字開頭),例如0127,即(127)8,等于十進(jìn)制的87。(3)十六進(jìn)制(以數(shù)字+小寫字母x開頭),例如0 x36, 即(36)16, 等于十進(jìn)制的54。根據(jù)變量的取值范圍整型變量可分為:基本整型(類型關(guān)鍵字為int)短整型(類型關(guān)鍵字為short int)長(zhǎng)整型(類型關(guān)鍵字為long int)。 對(duì)以上三種都可以加上修飾符unsigned,以指定是“無符號(hào)數(shù)”。不加修飾符unsigned的,隱含是有符號(hào)(signed),

5、signed可以不寫。歸納起來,整型變量有以下6種:有符號(hào)基本整型 signed int無符號(hào)基本整型 unsigned int有符號(hào)短整型 signed short int無符號(hào)短整型 unsigned short int有符號(hào)長(zhǎng)整型 signed long int無符號(hào)長(zhǎng)整型 unsigned long int例如,下面分別定義了有符號(hào)基本整型變量a和b、無符號(hào)長(zhǎng)整型變量c和d: int a,b; unsigned long c,d; 有符號(hào)整數(shù): 無符號(hào)整數(shù):符號(hào)位:表示該數(shù)的正負(fù)符號(hào),不能表示數(shù)值的大小0:正1:負(fù)(無符號(hào)位,所有位都用來表示數(shù)值的大小)1111111111111111

6、111111111111111165535-1 C標(biāo)準(zhǔn)沒有具體規(guī)定以上各類數(shù)據(jù)所占內(nèi)存大小,只要求long型數(shù)據(jù)不短于int型,short型不長(zhǎng)于int型,怎樣實(shí)現(xiàn)由計(jì)算機(jī)系統(tǒng)自行決定。 ANSI標(biāo)準(zhǔn)定義的各種整數(shù)類型和有關(guān)數(shù)據(jù)標(biāo)準(zhǔn)定義的各種整數(shù)類型和有關(guān)數(shù)據(jù)-3276832767 即 215 (215-1)065535 即 0 (216-1)-3276832767 即 215 (215-1)065535 即 0 (216-1)-21474836482147483647 即 231 (231-1)04294967295 即 0 (232-1)222244signed intunsigned i

7、ntsigned short intunsigned short intsigned long int unsigned long int取值范圍字節(jié)數(shù)類型 可以使用scanf函數(shù)和printf函數(shù)進(jìn)行數(shù)據(jù)的輸入輸出。 scanf函數(shù)的功能是按照指定格式將標(biāo)準(zhǔn)輸入設(shè)備輸入的內(nèi)容送入變量中,printf函數(shù)的功能是按照指定格式在標(biāo)準(zhǔn)輸出設(shè)備上顯示數(shù)據(jù)?!爸付ǜ袷健毙枰褂酶袷秸f明符%和格式字符,顯示整型數(shù)的格式字符有英文字母d、o、x、u等。 %d表示把數(shù)據(jù)按十進(jìn)制整型輸入(輸出);%o表示把數(shù)據(jù)按八進(jìn)制整型輸入(輸出);%x表示把數(shù)據(jù)按十六進(jìn)制整型輸入(輸出);%u表示把數(shù)據(jù)按無符號(hào)整型輸入(

8、輸出)。 除了%d格式之外,上面的其余幾種格式都將數(shù)據(jù)作為無符號(hào)數(shù)輸入(輸出)。如果輸入(輸出)的是長(zhǎng)整型數(shù),一定要在轉(zhuǎn)換字符的前面加字符l,否則顯示可能不對(duì)。例例2.1 整型數(shù)據(jù)的輸出。#include int main() int a=427,b=68,c; c=15+a+b; printf(%d,%d,%d,%dn, a,b,c,a-b-34); printf(%o,%o,%o,%on, a,b,c,a-b-34); printf(%x,%x,%x,%xn, a,b,c,a-b-34); getch(); return 0; 演示程序2_1例例2.2 整型數(shù)據(jù)的輸入。#include i

9、nt main() int a,b,c; unsigned d;long e; scanf(%d,%o,%x,%u,%ld , &a,&b,&c,&d,&e); printf(%d,%d,%d,%u,%ld n, a,b,c,d,e); getch(); return 0; 演示程序2_2 實(shí)數(shù)又稱浮點(diǎn)數(shù),有兩種表示形式: (1)十進(jìn)制小數(shù)形式:十進(jìn)制小數(shù)形式:由數(shù)字和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn)),例如3.14159、0.0、9.0、.12345、-9.8等。 (2)指數(shù)形式:指數(shù)形式:E(或e)。例如1.23E3、2.71e-5(分別代表1.23103、2.7110-5)等。注意:E(或e)的

10、兩邊必須有數(shù)字,且后面的指數(shù)必須是整數(shù)。 一個(gè)實(shí)數(shù)有多種指數(shù)表示形式。例如314.159可以表示為3141.59E-1、314.159E0、3.14159E2、0.314159E3等,把其中的3.14159E2稱為“規(guī)范化的指數(shù)形式”,即小數(shù)點(diǎn)左邊有且只有一位非零數(shù)字。 實(shí)型變量分為單精度型和雙精度型,有的C版本還支持長(zhǎng)雙精度型(long double)。(1)單精度型。類型說明符為float,在內(nèi)存中占個(gè)字節(jié)(32位),有效數(shù)字的個(gè)數(shù)是位十進(jìn)制數(shù)字,數(shù)值范圍-3.410-383.4 1038 。(2)雙精度型。類型說明符為double,在內(nèi)存中占個(gè)字節(jié)(64位),有效數(shù)字的個(gè)數(shù)是15位十進(jìn)制

11、數(shù)字,數(shù)值范圍-1.710-3081.7 10308 。 可以使用%f和%e控制輸入(輸出)float類型的數(shù)據(jù),使用%lf和%le控制輸入(輸出)double類型的數(shù)據(jù)。例例2.3 實(shí)型數(shù)據(jù)的輸入輸出。#include int main() float a,b;double x,y; scanf(%f,%e,%lf,%le, &a,&b,&x,&y); printf(%f,%e,%lf,%le n, a,b,x,y); getch(); return 0; 演示程序2_3 C的字符型常量是用一對(duì)單引號(hào)括起來的單個(gè)字符,例如,A、3、a、?等都是字符型常量。注意A和a是不同的。 還有一種特殊形

12、式的字符型常量,就是以轉(zhuǎn)義符“”開頭的一些字符構(gòu)成的轉(zhuǎn)義序列。例如n,它表示“回車換行”。 常見轉(zhuǎn)義字符及其含義常見轉(zhuǎn)義字符及其含義 警告聲退格,將當(dāng)前位置移到前一列換頁,將當(dāng)前位置移到下一頁開頭換行,將當(dāng)前位置移到下一行開頭回車,將當(dāng)前位置移到本行開頭橫向跳格,跳到下一個(gè)tab位置反斜線字符單撇號(hào)字符雙撇號(hào)字符1到3位8進(jìn)制數(shù)所代表的字符1到2位16進(jìn)制數(shù)所代表的字符字符串終止字符abfnrt”dddxhh0含義字符形式例例2.4 轉(zhuǎn)義字符的使用#include int main() printf(A102x43DEtbb343x61x62x3n); printf(A53101tb41521

13、41142x63x64n); getch(); return 0;演示程序2_4 字符串常量是用一對(duì)雙引號(hào)括起來的若干字符序列。例如:“How are you”,“No.345”。C編譯程序在存儲(chǔ)字符串常量時(shí)自動(dòng)采用字符0作為字符串結(jié)束標(biāo)志,它不引起任何控制動(dòng)作,也不是一個(gè)可顯示的字符。因此,字符串“Good”在內(nèi)存中要占5個(gè)字節(jié)數(shù),而不是4個(gè),如下所示:注意:注意:A和“A”是不同的,A是字符常量,在內(nèi)存占1個(gè)字節(jié)數(shù);“A”字符串常量,在內(nèi)存占2個(gè)字節(jié)數(shù),包含A和0兩個(gè)字符。 字符變量的類型說明符為char。 例如:“char c1,c2;”表示定義了兩個(gè)字符變量。 字符變量用來存儲(chǔ)字符常量

14、,一個(gè)字符變量只能存儲(chǔ)1個(gè)字符,即只能存儲(chǔ)1個(gè)字節(jié)的信息,就是說一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。 例如用如下語句給上面定義的字符變量c1、c2賦值: c1=A;c2=B; 將一個(gè)字符常量放到一個(gè)字符變量中,實(shí)質(zhì)上是將該字符常量對(duì)應(yīng)的ASCII代碼放到了字符變量中,系統(tǒng)為字符變量所分配的一個(gè)字節(jié)的存儲(chǔ)單元中,存放的是該字符常量的二進(jìn)制形式的ASCII代碼,例如A的ASCII代碼是65,65的二進(jìn)制形式是01000001,所以系統(tǒng)為c1所分配的一個(gè)字節(jié)中,存放的是01000001。因此,字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值和輸入輸出。 可以使用%c控制輸入(輸出)char類型的數(shù)據(jù)。例例2.5 字符變量

15、值的輸入輸出。#include int main() char c1,c2; char c3=P; scanf(%c ,&c1); c2=D; printf(%c%c%c ,c1,c2,c3); printf(,%c,%c,%c n ,c1,c2,c3); getch(); return 0;演示程序2_5 例例2.6 大寫字符轉(zhuǎn)換為小寫字符。#include int main() char c1,c2; scanf(%c,%c,&c1,&c2); printf(%c%cn,c1,c2); c1=c1+32;c2=c2+32; printf(%c,%cn ,c1,c2); getch(); r

16、eturn 0; 演示程序2_6基本的算術(shù)運(yùn)算符有如下五種:+(加法運(yùn)算符、或正值運(yùn)算符,如13+25、+9);-(減法運(yùn)算符、或負(fù)值運(yùn)算符,如32-15、-2);*(乘法運(yùn)算符,如4*7、5.6*7.8);/(除法運(yùn)算符,如32/5、1.23/3.45);%(求余數(shù)運(yùn)算符,或稱取模運(yùn)算符,如8%5的值為3)。 關(guān)于除法運(yùn)算符/:若是兩個(gè)整數(shù)相除,其商為整數(shù),小數(shù)部分被舍棄;若除數(shù)和被除數(shù)中有一個(gè)是浮點(diǎn)數(shù)(實(shí)數(shù)),則與數(shù)學(xué)的運(yùn)算規(guī)則相同。 關(guān)于求余數(shù)運(yùn)算符:要求兩側(cè)的操作數(shù)均為整型數(shù)據(jù),結(jié)果的符號(hào)與%左邊的符號(hào)相同??梢岳?運(yùn)算來判斷一個(gè)數(shù)能否被另一個(gè)數(shù)整除。 1算術(shù)表達(dá)式的概念 用算術(shù)運(yùn)算

17、符和圓括號(hào)將運(yùn)算對(duì)象(常量、變量和函數(shù)等)連接起來的、符合語言語法規(guī)則的式子,稱為C算術(shù)表達(dá)式。 單個(gè)常量、變量或函數(shù),可以看作是表達(dá)式的一種特例。 例如數(shù)學(xué)表達(dá)式(2x+3y)(4xy),寫成語言的算術(shù)表達(dá)式,應(yīng)該是:(2*x+3*y)/(4*x*y),或(2*x+3*y)/4/x/y,不能是(2x+3y)/(4xy),也不能是2*x+3*y/(4*x*y),也不能是(2*x+3*y)/4*x*y。 1算術(shù)表達(dá)式的概念 算術(shù)表達(dá)式的結(jié)果不應(yīng)超過其能表示的數(shù)的范圍。例如整型數(shù)的范圍是-32768至32767,下面程序中的算術(shù)表達(dá)式x+y顯然是錯(cuò)的,因?yàn)槌^了32767。main() int x

18、,y;x=31500;y=24600;printf(“%d”,x+y); 若將x和y定義為長(zhǎng)整型,就沒有問題了。僅將d改成ld也不可以。2算術(shù)運(yùn)算符的優(yōu)先級(jí)與結(jié)合性 表達(dá)式求值時(shí),按運(yùn)算符的優(yōu)先級(jí)別高低,按次序執(zhí)行。算術(shù)運(yùn)算符的優(yōu)先級(jí)是:先乘除,后加減;求余數(shù)運(yùn)算的優(yōu)先級(jí)與乘除相同;函數(shù)和圓括號(hào)的優(yōu)先級(jí)最高。 所謂結(jié)合性是指,當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算符具有相同的優(yōu)先級(jí)時(shí),該操作數(shù)是先與左邊的運(yùn)算符結(jié)合,還是先與右邊的運(yùn)算符結(jié)合?自左至右的結(jié)合方向,稱為左結(jié)合性。反之,稱為右結(jié)合性。 算術(shù)運(yùn)算符的結(jié)合方向是“自左至右”,例如:在執(zhí)行“ab+c”時(shí),變量b先與減號(hào)結(jié)合,執(zhí)行“ab”;然后再執(zhí)行加c的

19、運(yùn)算。 在語言中,整型、實(shí)型和字符型數(shù)據(jù)間可以混合運(yùn)算。 如果一個(gè)運(yùn)算符兩側(cè)的操作數(shù)的數(shù)據(jù)類型不同,則系統(tǒng)按“先轉(zhuǎn)換、后運(yùn)算”的原則,首先將數(shù)據(jù)自動(dòng)轉(zhuǎn)換成同一類型,然后在同一類型數(shù)據(jù)間進(jìn)行運(yùn)算。有兩種轉(zhuǎn)換方式:自動(dòng)轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換。1自動(dòng)轉(zhuǎn)換 自動(dòng)轉(zhuǎn)換就是系統(tǒng)根據(jù)規(guī)則自動(dòng)地將兩個(gè)不同數(shù)據(jù)類型的運(yùn)算對(duì)象轉(zhuǎn)換成同一數(shù)據(jù)類型。自動(dòng)轉(zhuǎn)換又稱為隱式轉(zhuǎn)換。 1自動(dòng)轉(zhuǎn)換注意注意,自動(dòng)轉(zhuǎn)換只是針對(duì)一個(gè)運(yùn)算符兩側(cè)的兩個(gè)運(yùn)算對(duì)象,不能對(duì)表達(dá)式中的所有運(yùn)算符涉及到的運(yùn)算對(duì)象做一次性的自動(dòng)轉(zhuǎn)換。例如,表達(dá)式6.0/5+4.32和表達(dá)式6/5+4.32,前者的值是5.52,后者的值是5.32。因?yàn)?.0/5是先將5轉(zhuǎn)換成f

20、loat型后進(jìn)行運(yùn)算,值是1.2,再與4.32相加,值是5.52。而6/5是按int型運(yùn)算,值是1,再與4.32相加,值是5.32;不要理解成將6/5+4.32中的每個(gè)數(shù)全部轉(zhuǎn)換成float型后再運(yùn)算。2強(qiáng)制轉(zhuǎn)換 編寫程序時(shí),可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式的值轉(zhuǎn)換成所需類型,強(qiáng)制轉(zhuǎn)換的格式為: (類型名)(表達(dá)式) 例如:(float)a(將a轉(zhuǎn)換成float型。注意不能寫成float(a)(int)3.45(將3.45轉(zhuǎn)換成int型)(double)(7%6)(將7%6的值轉(zhuǎn)換成double型)(float)(x+y)(將x+y的值轉(zhuǎn)換成float型。注意注意不能寫成(float)x

21、+y) 1普通賦值運(yùn)算符普通賦值運(yùn)算符 普通賦值運(yùn)算符就是“=”,它的作用是將運(yùn)算符右側(cè)表達(dá)式的值賦給運(yùn)算符左側(cè)的變量。例如“x=1.23”的作用是將常量1.23賦給變量x,“y=3*x+5.26”的作用是將表達(dá)式3*x+5.26的值賦給變量y。例如“x= x+1”的作用是:將變量x原來的值加1后再賦給變量x,若變量x原來的值是2,則執(zhí)行“x= x+1”后,變量x的值是3。 2復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符 復(fù)合賦值運(yùn)算符是在普通賦值運(yùn)算符“=”的前面加上其它運(yùn)算符,復(fù)合算術(shù)賦值運(yùn)算符有如下5個(gè): +=、-=、*=、/=、%= 另外還有5種復(fù)合賦值運(yùn)算符(=、&=、=、|=),將在后面其它章中介

22、紹。 復(fù)合算術(shù)賦值運(yùn)算符的使用規(guī)則為:Xop=Y等價(jià)于X=XopY,其中X代表被賦值的某個(gè)變量,op代表+或-或*或/或%,Y代表某個(gè)表達(dá)式。例如:a+=9 等價(jià)于 a=a+9b*=c+5 等價(jià)于 b=b*(c+5) (注意不等價(jià)于b=b*c+5)d/=2*e-7 等價(jià)于 d=d/(2*e-7) (注意不等價(jià)于d=d/2*e-7) 由變量、賦值運(yùn)算符和表達(dá)式連接起來的式子稱為賦值表達(dá)式。賦值表達(dá)式的值就是被賦值的變量的值。例如,a=123是一個(gè)賦值表達(dá)式,a=123這個(gè)賦值表達(dá)式的值就是a的值,而a的值是123,所以a=123這個(gè)賦值表達(dá)式的值就是123。例如,b+=456也是一個(gè)賦值表達(dá)式,

23、b+=456這個(gè)賦值表達(dá)式的值就是b的值,因?yàn)閎+=456等價(jià)于b=b+456,若b的初值是300,則執(zhí)行b=b+456后,b的值是756,所以b+=456這個(gè)賦值表達(dá)式的值就是756。下面是賦值表達(dá)式的其它幾個(gè)例子:x=(y=23)+(z=17)-8(x的值是32,所以賦值表達(dá)式的值是32)x/=8*(y=2)(若x的初值是32,執(zhí)行x/=8*(y=2)后,x的值是2,所以賦值表達(dá)式的值是2)y1=y2=y3=8(執(zhí)行y1=y2=y3=8后,y1、y2、y3的值都是8,所以賦值表達(dá)式的值是8) 賦值表達(dá)式的后面加上分號(hào)(;),就成為賦值語句。 賦值表達(dá)式也可以在賦值語句之外的其它語句中出現(xiàn)。

24、例如: if (ch=getchar())!= n) printf(“%c”,ch);上面語句中出現(xiàn)了賦值表達(dá)式“ch=getchar()” ,ch的值就是賦值表達(dá)式ch=getchar()的值,若該值不等于n,則輸出ch的值。 當(dāng)賦值運(yùn)算符左邊的變量數(shù)據(jù)類型與右邊的表達(dá)式的數(shù)據(jù)類型不相同時(shí),需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,系統(tǒng)把右邊的數(shù)據(jù)轉(zhuǎn)換成左邊數(shù)據(jù)類型的數(shù)據(jù)。 轉(zhuǎn)換后可能會(huì)發(fā)生數(shù)據(jù)丟失現(xiàn)象。例如,左邊為int型,右邊為long型,由于long型在內(nèi)存中所占二進(jìn)制位數(shù)(32位)大于int型在內(nèi)存中所占二進(jìn)制位數(shù)(16位),造成long型的高16位無法復(fù)制到int型變量中去,因此可能丟失數(shù)據(jù)。同理,

25、左邊為float型,右邊為double型,也可能丟失數(shù)據(jù)。 1整型和字符型之間的轉(zhuǎn)換整型和字符型之間的轉(zhuǎn)換 (1)字符型數(shù)據(jù)賦給整型變量 由于字符型數(shù)據(jù)在內(nèi)存中占8位,而整型變量在內(nèi)存中占16位,因此將字符型數(shù)據(jù)的8位放到整型變量的低8位中。對(duì)整型變量高8位的處理:有的系統(tǒng)是對(duì)整型變量高8位補(bǔ)0;有的系統(tǒng)是根據(jù)字符型數(shù)據(jù)的最高位的值來決定補(bǔ)1還是補(bǔ)0。 例如Turbo C是根據(jù)字符型數(shù)據(jù)的最高位的值來決定補(bǔ)1還是補(bǔ)0。若字符型數(shù)據(jù)的最高位值為0,則對(duì)整型變量高8位補(bǔ)0;若字符型數(shù)據(jù)的最高位值為1,則對(duì)整型變量高8位補(bǔ)1。 1整型和字符型之間的轉(zhuǎn)換整型和字符型之間的轉(zhuǎn)換 (2)整型(int或sh

26、ort或long)數(shù)據(jù)賦給字符型變量 由于字符型數(shù)據(jù)在內(nèi)存中占8位,所以只將整型數(shù)據(jù)的低8位送到字符型變量中。例如,若將十進(jìn)制int型數(shù)據(jù)322賦給字符型變量ch,因?yàn)?22的二進(jìn)制形式是0000000101000010,它的低8位是01000010(十進(jìn)制形式是66),所以字符型變量ch的值的二進(jìn)制形式是01000010(即66),若執(zhí)行“printf(“%c”,ch);”語句則輸出字符B,因?yàn)锽的ASCII碼是66(十進(jìn)制)。例如,若將十進(jìn)制int型數(shù)據(jù)65賦給字符型變量ch,因?yàn)?5的二進(jìn)制形式是0000000001000001,它的低8位是01000001(十進(jìn)制形式也是65),所以字

27、符型變量ch的值的二進(jìn)制形式是01000001,若執(zhí)行“printf(”%c”,ch);” 語句則輸出字符A。2整型之間的轉(zhuǎn)換整型之間的轉(zhuǎn)換(1)int型數(shù)據(jù)賦給long型變量 將int型數(shù)據(jù)的16位二進(jìn)制代碼送到long型變量的低16位中,如果int型數(shù)據(jù)值為正(符號(hào)位是0),則long型變量的高16位補(bǔ)0;如果int型數(shù)據(jù)值為負(fù)(符號(hào)位是1),則long型變量的高16位補(bǔ)1。高16位補(bǔ)0或1稱為符號(hào)擴(kuò)展。(2)long型數(shù)據(jù)賦給int型變量。只將long型數(shù)據(jù)中的低16位送到int型變量中。(3)unsigned int型數(shù)據(jù)賦給long int型變量。此時(shí)不存在符號(hào)擴(kuò)展問題,只需將lon

28、g int型變量的高位補(bǔ)0即可。2整型之間的轉(zhuǎn)換整型之間的轉(zhuǎn)換(4)unsigned型數(shù)據(jù)賦給占二進(jìn)制位數(shù)相同的其它整型變量 將unsigned型數(shù)據(jù)的內(nèi)容原樣送到其它整型變量中,但是如果范圍超過其它整型變量允許的范圍,則會(huì)出錯(cuò)。例如,若a是unsigned int型變量,a=65535,而b是int型變量,若執(zhí)行“b=a;”,由于a的二進(jìn)制形式是1111111111111111,所以b的二進(jìn)制形式也是1111111111111111,由于最高位(符號(hào)位)是1,因此b成了負(fù)數(shù),根據(jù)補(bǔ)碼知識(shí),可知b是-1,執(zhí)行“printf(“%d”,b);”將輸出-1。2整型之間的轉(zhuǎn)換整型之間的轉(zhuǎn)換(5)非u

29、nsigned型的整型數(shù)據(jù)賦給占二進(jìn)制位數(shù)相同的unsigned型變量 此時(shí)也是原樣照賦(最高的符號(hào)位也一起傳送)。例如,若a是unsigned int型變量,b是int型變量,b=-1。若執(zhí)行“a=b;”,由于b的二進(jìn)制形式是1111111111111111,所以a的二進(jìn)制形式也是1111111111111111。若執(zhí)行“printf(“%d”,a);”,將輸出65535。 3實(shí)型與整型之間的轉(zhuǎn)換實(shí)型與整型之間的轉(zhuǎn)換 (1)整型數(shù)據(jù)賦給實(shí)型變量 系統(tǒng)將整型數(shù)據(jù)轉(zhuǎn)換成單(或雙)精度實(shí)型數(shù)據(jù),保持?jǐn)?shù)值不變,賦值給實(shí)型變量。(2)實(shí)型數(shù)據(jù)賦給整型變量 單(或雙)精度實(shí)型數(shù)據(jù)賦給整型變量,舍棄實(shí)型數(shù)

30、據(jù)的小數(shù)部分,將整數(shù)部分賦給整型變量。例如,若n是int型變量,執(zhí)行“n=5.67;”的結(jié)果使n的值為5,執(zhí)行“printf(“%d”,n);”將輸出5。 4實(shí)型之間的轉(zhuǎn)換實(shí)型之間的轉(zhuǎn)換 (1)float型數(shù)據(jù)賦給double型變量 此時(shí)保持?jǐn)?shù)值不變,存放到double型變量中,在內(nèi)存中以64位二進(jìn)制形式存儲(chǔ)。 (2)double型數(shù)據(jù)賦給float型變量 此時(shí)截取double型數(shù)據(jù)的前7位有效數(shù)字,存放到float型變量中,在內(nèi)存中以32位二進(jìn)制形式存儲(chǔ)。此時(shí)可能要丟失數(shù)據(jù),注意數(shù)值范圍不要溢出。 自增和自減運(yùn)算符都是單目運(yùn)算符,自增運(yùn)算符+的作用是使變量的值增1,自減運(yùn)算符-的作用是使變量

31、的值減1。 對(duì)于int型變量i,+i和i+都等價(jià)于i=i+1,-i和i-等價(jià)于i=i-1。 +i和-i是前綴表示法,i+和i-是后綴表示法。前綴表示法是將i值先增/減1,再在表達(dá)式中使用;后綴表示法是先在表達(dá)式中使用i的值,再將i值增/減1。例例2.7 自增、自減運(yùn)算符的使用。#include int main() int i,j,k; i=6;j=+i;k=i+; printf(%d,%d,%dn ,j,k,i); i=-6;j=-i;k=i-; printf(%d,%d,%dn ,j,k,i); getch(); return 0; 演示程序2_7要注意注意的幾點(diǎn):(1)自增、自減運(yùn)算符,

32、不能用于常量和表達(dá)式。例如,+6、-(i+3*j)等都是非法的。(2)自增、自減運(yùn)算符的優(yōu)先級(jí)高于算術(shù)運(yùn)算符,與單目運(yùn)算符-(取負(fù))和!(邏輯非)的優(yōu)先級(jí)相同,結(jié)合方向自右至左。例如-a+等價(jià)于-(a+)。(3)像“printf(%d,%d n ,i,i+);”這樣出現(xiàn)“i,i+”的語句,在不同的編譯系統(tǒng)中結(jié)果是不同的。若i的值是6,按從左至右求值,輸出“6,6”;按從右至左求值,輸出“7,6”。Turbo C是按從右至左求值的。(4)自增或自減運(yùn)算符最好單獨(dú)使用,避免自增或自減運(yùn)算與其它運(yùn)算符混合使用。像i+j這樣的很難理解的表達(dá)式,應(yīng)避免使用。 C語言還提供逗號(hào)運(yùn)算符,逗號(hào)將兩個(gè)表達(dá)式連接起來,形成一個(gè)表達(dá)式,稱為逗號(hào)表達(dá)式。它的一般形式如下: 表達(dá)式1,表達(dá)式2 逗號(hào)表達(dá)式的求值過程是:先求表達(dá)式1的值,再求表達(dá)式2的值,將表達(dá)式2的值作為逗號(hào)表達(dá)式的值。例如,逗號(hào)表達(dá)式“8-3,6+5”的值是11。例如,逗號(hào)表達(dá)式“k=2*3,+k”的值是7。注意注意,賦值運(yùn)算符的優(yōu)先級(jí)高于逗號(hào)運(yùn)算符,所以“k=2*3,+k”是逗號(hào)表達(dá)式,不要將其理解為“k=(2*3,+k)”。例如,逗號(hào)表達(dá)式“a=6,a+

溫馨提示

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