C語(yǔ)言基本數(shù)據(jù)類(lèi)型整型(int)用法詳解_第1頁(yè)
C語(yǔ)言基本數(shù)據(jù)類(lèi)型整型(int)用法詳解_第2頁(yè)
C語(yǔ)言基本數(shù)據(jù)類(lèi)型整型(int)用法詳解_第3頁(yè)
C語(yǔ)言基本數(shù)據(jù)類(lèi)型整型(int)用法詳解_第4頁(yè)
C語(yǔ)言基本數(shù)據(jù)類(lèi)型整型(int)用法詳解_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C語(yǔ)言基本數(shù)據(jù)類(lèi)型:整型(int)用法詳解整型intC語(yǔ)言提供了很多整數(shù)類(lèi)型(整型),這些整型的區(qū)別在于它們的取值范圍的大小,以及是否可以為負(fù)。int是整型之一,一般被稱為整型。以后,在不產(chǎn)生歧義的情況下,我們把整數(shù)類(lèi)型和int都稱為整型。int代表有符號(hào)整數(shù),也就是說(shuō),用int聲明的變量可以是正數(shù),可以是負(fù)數(shù),也可以是零,但是只能是整數(shù)。標(biāo)準(zhǔn)規(guī)定int的最小取值范圍是-32767到32767。int的取值范圍因機(jī)器而異,但是一定要大于或者等于-32767到32767。一般來(lái)說(shuō),int占用一個(gè)字的內(nèi)存空間。因此,字長(zhǎng)為16位(Bit)的舊式IBM兼容機(jī)使用16位來(lái)儲(chǔ)存整型int,取值范圍是-3

2、2768到32767。目前的個(gè)人電腦一般都是32位字長(zhǎng)的,這些電腦中,int般也是32位的,取值范圍是-2147483648到2147483647。對(duì)于使用64位CPU的電腦,使用更多位儲(chǔ)存int也是很自然的事情,取值范圍當(dāng)然也會(huì)更大。聲明int類(lèi)型的變量正如我們?cè)谝郧暗慕坛汤锟吹降哪菢樱琲nt用于聲明整型變量:以int打頭,后面跟著變量的名字,最后以分號(hào)(;)結(jié)束。例如:interns;/*聲明一個(gè)變量*/*注意:一定要用逗號(hào)(,),不能用分號(hào)(;)*/inthogs,cows,goats;/*聲明三個(gè)變量*/以上聲明創(chuàng)建了變量,但是沒(méi)有給它們提供“值(value)”。在前面的教程中,我們已

3、經(jīng)用了兩種方法使變量獲得“值”。一種是賦值:cows=500;。另一種是使用scanf函數(shù):scanf(%d,&goats);。下面我們來(lái)學(xué)習(xí)第三種方法。初始化變量初始化變量是指給變量賦初值:聲明變量的時(shí)候,在變量名的后面寫(xiě)上等號(hào)(=),然后寫(xiě)下你希望賦予變量的“值”。例如:inthogs=21;intcows=32,goats=14;intdogs,cats=94;以上聲明創(chuàng)建了變量,并且為這些變量分配了空間,同時(shí)也賦了初值。注意,第三行中只有cats被初始化為94,而dogs沒(méi)有被初始化!如下圖:int常量上面的例子中,21、32、14,以及94都是整數(shù)常量。C語(yǔ)言中,整數(shù)常量的默認(rèn)類(lèi)型是

4、int。如果整數(shù)常量的大小超過(guò)了int的取值范圍,那么編譯器將會(huì)把這個(gè)整數(shù)常量當(dāng)作longint類(lèi)型來(lái)處理,這個(gè)我們后面還會(huì)講到。21、32、14和94都在int的取值范圍之內(nèi),因此它們都是int常量。輸出int型數(shù)據(jù)我們可以用printf函數(shù)來(lái)輸出int型數(shù)據(jù)。正如我們?cè)谇懊娴慕坛讨锌吹降哪菢?,占位?d代表輸出的是int型數(shù)據(jù),它告訴printf函數(shù)在什么地方輸出相應(yīng)的int型數(shù)據(jù)。d也被稱為格式限定符(formatspecifier),因?yàn)樗付藀rintf函數(shù)應(yīng)該使用什么形式來(lái)輸出數(shù)據(jù)。printf函數(shù)的第一個(gè)參數(shù)只能是字符串,這個(gè)字符串被稱為格式串(formatstring)。格式

5、串中有多少個(gè)%d,我們就應(yīng)該相應(yīng)地提供多少個(gè)int型參數(shù)給printf函數(shù)。int型參數(shù)可以是int型變量,int型常量,以及結(jié)果為int型的表達(dá)式等。例如:intyear=2005;/*year是int型變量*/printf(Todayis%d-%d-%d,year,9,20+9);/*20+9是加法表達(dá)式*/保證格式限定符的數(shù)目和參數(shù)數(shù)目一致是我們的責(zé)任,編譯器不負(fù)責(zé)捕捉這種錯(cuò)誤!例如:#includeintmain(void)intten=10,two=2;printf(%dminus%dis%d,ten);/*少寫(xiě)了兩個(gè)參數(shù)*/getchar();/*等待用戶按回車(chē)*/return0;

6、這個(gè)程序可以通過(guò)編譯,但是運(yùn)行結(jié)果將會(huì)出乎意料,因?yàn)槲覀兩賹?xiě)了兩個(gè)參數(shù)。標(biāo)準(zhǔn)規(guī)定,如果格式限定符的數(shù)目大于參數(shù)數(shù)目,則printf函數(shù)的行為是未定義的;如果參數(shù)數(shù)目大于格式限定符的數(shù)目,則多余的參數(shù)會(huì)被忽略。八進(jìn)制(octal)和十六進(jìn)制(hexadecimal)C語(yǔ)言中,整數(shù)常量默認(rèn)是十進(jìn)制(decimal)整數(shù)。通過(guò)在整數(shù)常量前面加上特定的前綴,可以把它設(shè)定為八進(jìn)制或者十六進(jìn)制整數(shù)。前綴0 x或者0X把整數(shù)常量設(shè)定為十六進(jìn)制整數(shù)。注意,是數(shù)字0,而不是字母O,別搞錯(cuò)了哦!例如:十進(jìn)制的16用十六進(jìn)制來(lái)表示是0 x10或者0X10。在整數(shù)常量前面加上前綴0,表示它是八進(jìn)制整數(shù)。注意,是數(shù)字0

7、,而不是字母O。例如:十進(jìn)制的16表示為八進(jìn)制就是020。以八進(jìn)制或者十六進(jìn)制形式輸出數(shù)據(jù)使用格式限定符%o可以以八進(jìn)制的形式輸出整數(shù)。注意,是小寫(xiě)字母o,不是數(shù)字0。使用%x或者%X可以以十六進(jìn)制的形式輸出整數(shù)。小寫(xiě)x表示輸出使用小寫(xiě)字母,大寫(xiě)X表示輸出使用大寫(xiě)字母。使用%#o,%#x或者%#X,得到的輸出將包括前綴0,0 x或者0X。例如:#includeintmain(void)intx=200;printf(dec=%d;octal=%o;hex=%x;HEX=%X,x,x,x,x);printf(dec=%d;octal=%#o;hex=%#x;HEX=%#X,x,x,x,x);ge

8、tchar();return0;這個(gè)程序的輸出是:dec=200;octal=310;hex=c8;HEX=C8dec=200;octal=0310;hex=0 xc8;HEX=0XC81.其它整數(shù)類(lèi)型int是C語(yǔ)言的基本整數(shù)類(lèi)型,可以滿足我們處理一般數(shù)據(jù)的需求。C語(yǔ)言還提供了四個(gè)可以修飾int的關(guān)鍵字:short、long、signed,以及unsigned。利用這四個(gè)關(guān)鍵字,C語(yǔ)言標(biāo)準(zhǔn)定義了以下整數(shù)類(lèi)型:1)shortint(可簡(jiǎn)寫(xiě)為short),和int一樣,也是有符號(hào)整數(shù)2)longint(簡(jiǎn)寫(xiě):long),有符號(hào)整數(shù)3)longlongint(簡(jiǎn)寫(xiě):longlong),C99標(biāo)準(zhǔn)添加

9、的類(lèi)型,有符號(hào)整數(shù)4)unsignedint(簡(jiǎn)寫(xiě):unsigned),無(wú)符號(hào)整數(shù),不能表示負(fù)數(shù)5)unsignedlongint(簡(jiǎn)寫(xiě):unsignedlong),無(wú)符號(hào)整數(shù),不能表示負(fù)數(shù)6)unsignedshortint(簡(jiǎn)寫(xiě):unsignedshort),無(wú)符號(hào)整數(shù),不能表示負(fù)數(shù)7)unsignedlonglongint(簡(jiǎn)寫(xiě):unsignedlonglong),C99添加的類(lèi)型,無(wú)符號(hào)整數(shù)8)所有沒(méi)有標(biāo)明unsigned的整數(shù)類(lèi)型默認(rèn)都是有符號(hào)整數(shù)。在這些整數(shù)類(lèi)型前面加上signed可以使讀者更清楚地知道這些是有符號(hào)整數(shù),盡管有沒(méi)有signed都表示有符號(hào)整數(shù)。例如:signedin

10、t等同于int。一般我們把short稱為短整型,把long稱為長(zhǎng)整型,把longlong稱為超長(zhǎng)整型,把int稱為整型。unsigned打頭的那些整數(shù)類(lèi)型統(tǒng)稱為無(wú)符號(hào)整型。例如:我們稱unsignedshort為無(wú)符號(hào)短整型。以此類(lèi)推。2.聲明方式這些整數(shù)類(lèi)型的聲明方式與int類(lèi)型的聲明方式一樣。例如:longintestine;longjohns;shortinterns;shortribs;unsignedints_count;unsignedplayers;unsignedlongheadcount;unsignedshortyesvotes;longlongago;/*C99特有*/u

11、nsignedlonglongego;/*C99特有*/如果您的編譯器不支持C99標(biāo)準(zhǔn),那就不能使用longlong和unsignedlonglong。取值范圍(表示范圍)標(biāo)準(zhǔn)也規(guī)定了這些整數(shù)類(lèi)型的最小取值范圍。short的最小表示范圍和int一樣,都是-32767到32767。也就是-(2T5-1)到(2T5-1)。其中,2T5表示2的15次方。類(lèi)似地,2的20次方記作2八20,以此類(lèi)推。注意:C語(yǔ)言中2T5并不表示2的15次方,為了書(shū)寫(xiě)方便,我們姑且這么表示。long的最小取值范圍是-2147483647到2147483647。也就是-(2T1-1)至U(2A31-1)。unsigneds

12、hort的最小表示范圍和unsignedint一樣,都是0到65535(26-1)。unsignedlong的最小取值范圍是0到4294967295(272-1)。longlong的最小取值范圍是-9223372036854775807(-(273-1)到9223372036854775807(2A63-1);unsignedlonglong是0到18446744073709551615(2A64-1)。標(biāo)準(zhǔn)規(guī)定,int的表示范圍不能小于short的表示范圍,long的表示范圍不能小于int的表示范圍。這就是說(shuō)short型變量占用的空間可能比int型變量少,而long型變量占用的空間可能比in

13、t型變量多。16位(bit)的計(jì)算機(jī)中,int和short一般都是16位,而long是32位;32位的計(jì)算機(jī)中,short一般是16位,而long和int是32位。TC2(16位的編譯器)中,int是16位的;而Dev-C+(32位的編譯器)中,int是32位的。使用unsignedint聲明的變量只能表示非負(fù)整數(shù)(0和正整數(shù))。如果int是16位的話,那么unsignedint的表示范圍是0到65535(2A16-1)。這是因?yàn)閡nsigned不需要符號(hào)位,可以把16個(gè)位全都用于表示整數(shù)。而int需要一個(gè)位作為符號(hào)位,用于表示正負(fù),只有15個(gè)位用于表示整數(shù)。目前,longlong一般64位,

14、long是32位,short是16位,而int或者16位,或者32位。具體某個(gè)編譯器到底使用多少位來(lái)表示這些類(lèi)型,我們可以用運(yùn)算符sizeof來(lái)獲取。例如:printf(%lu,(unsignedlong)sizeof(int)*8);/*輸出int的位數(shù)*/printf(%zu,sizeof(short)*8);/*輸出short的位數(shù)*/sizeof運(yùn)算符返回其操作數(shù)占用空間的大小,以字節(jié)(Byte)為單位。注意,C定義字節(jié)的大小為char類(lèi)型的大小。char通常是8位(bit)的,當(dāng)然也可以更大。這里我們假設(shè)char是8位的。點(diǎn)擊查看char類(lèi)型詳細(xì)介紹sizeof的用法我們以后會(huì)講到,

15、現(xiàn)在只要有個(gè)印象就好了。第二句中的%zu是C99特有的,如果您的編譯器不支持C99(準(zhǔn)確地說(shuō),應(yīng)該是如果您的編譯器使用的庫(kù)函數(shù)不支持C99),運(yùn)行結(jié)果將會(huì)出錯(cuò)。整數(shù)類(lèi)型的選擇如果您要處理的只是非負(fù)整數(shù),那么應(yīng)該優(yōu)先使用unsigned打頭的那些整數(shù)類(lèi)型。如果您要處理的整數(shù)超出了int所能表示的范圍,并且您的編譯器中,long的表示范圍比int大,那就使用long。不過(guò),若非必要,盡量不要用long,因?yàn)樗赡軙?huì)降低程序運(yùn)行效率。有一點(diǎn)要注意:如果您的編譯器中,long和int都是32位的,并且您需要使用32位整數(shù),那么應(yīng)該用long,而不要用int。只有這樣,我們的程序才可以安全地移植到16位

16、的計(jì)算機(jī),因?yàn)?6位的計(jì)算機(jī)中,int般也是16位的。類(lèi)似地,如果您需要使用64位整數(shù),那就用longlong。如果int是32位的話,那么使用short可以節(jié)省空間,不過(guò)您得確保您要處理的整數(shù)不會(huì)超出short的表示范圍。這種“節(jié)省”對(duì)內(nèi)存大的計(jì)算機(jī)來(lái)說(shuō),是沒(méi)什么意義的。long型常量和longlong型常量一般來(lái)說(shuō),整數(shù)常量是被當(dāng)作int類(lèi)型來(lái)存儲(chǔ)的。如果我們使用的整數(shù)常量超出了int的表示范圍,C語(yǔ)言規(guī)定編譯器自動(dòng)使用unsignedint來(lái)處理這個(gè)常量。如果unsigned也不足以表示這個(gè)常量的話,編譯器就會(huì)用long。如果還表示不了的話,那就依次用unsignedlong,longl

17、ong,unsignedlonglong。如果unsignedlonglong也表示不了,那么編譯器就沒(méi)轍了。注意:longlong和unsignedlonglong是C99特有的。例如:如果int是16位的話,它就表示不了常量1000000。編譯器會(huì)使用long來(lái)處理這個(gè)常量,因?yàn)閡nsignedint也表示不了1000000。同樣,十六進(jìn)制和八進(jìn)制整數(shù)常量通常也是被作為int來(lái)處理。但是,當(dāng)我們使用的常量超出了int的表示范圍后,編譯器會(huì)依次使用unsignedint,long,unsignedlong,longlong和unsignedlonglong。直到所使用的類(lèi)型足以表示那個(gè)常量為

18、止。有時(shí),我們使用的是較小的常量,但是我們希望這個(gè)常量被當(dāng)作long來(lái)處理,這就需要在這個(gè)常量后面加上后綴丨(小寫(xiě)字母l)或者L(大寫(xiě)字母L)。我們應(yīng)該避免使用l,因?yàn)閘容易和數(shù)字1混淆。例如:整數(shù)常量7是被作為int來(lái)處理的,但整數(shù)常量7L(或者7l)是被作為long來(lái)處理的。類(lèi)似地,在整數(shù)常量后面加上后綴ll或者LL,這個(gè)常量就會(huì)被當(dāng)作longlong來(lái)處理。例如:3LL。如果想使用無(wú)符號(hào)整數(shù)常量的話,還要配合使用后綴u或者U。例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL。這些后綴也可以用于十六進(jìn)制和八進(jìn)制整數(shù)常量。例如:020L,010LL,0 x30uL,0

19、x40ull。1.輸出各種整數(shù)類(lèi)型的變量輸出不同類(lèi)型的整數(shù),需要使用不用的格式限定符。輸出unsignedint類(lèi)型的整數(shù),要用%u。輸出long,要用%ld;如果要以十六進(jìn)制或者八進(jìn)制形式輸出,那就用%lx(或者%lX)或者lo。注意:雖然整數(shù)常量的后綴使用大寫(xiě)或者小寫(xiě)英文字母都沒(méi)關(guān)系,但是它們格式限定符必須使用小寫(xiě)!如果我們要輸出short類(lèi)型的整數(shù),可以在%d中間加上前綴h,也就是%hd;同理,%ho和hx(或者h(yuǎn)X)分別表示以八進(jìn)制或十六進(jìn)制形式輸出。前綴h和丨可以和u組合,表示輸出無(wú)符號(hào)整數(shù)。例如:%lu表示輸出unsignedlong類(lèi)型的整數(shù);%hu表示輸出unsignedsho

20、rt類(lèi)型的整數(shù)。如果您的編譯器支持C99,可以使用%lld和%llu分別表示輸出longlong和unsignedlonglong。下面我們來(lái)看一個(gè)輸出各種類(lèi)型整數(shù)的程序:#includeintmain(void)unsignedintun=3000000000;/*我使用的編譯器int是32位的*/shortend=200;/*而short是16位的*/longbig=65537;printf(un=%uandnot%d,un,un);printf(end=%hdand%d,end,end);printf(big=%ldandnot%hd,big,big);printf(PressENTER

21、toquit.);getchar();return0;使用Dev-C+編譯運(yùn)行這個(gè)程序輸出結(jié)果如下:un=3000000000andnot-1294967296end=200and200big=65537andnot1PressENTERtoquit.這個(gè)程序表明,錯(cuò)誤使用格式限定符會(huì)導(dǎo)致意想不到的輸出。首先,錯(cuò)誤使用%d來(lái)做無(wú)符號(hào)整型變量un的格式限定符,導(dǎo)致輸出的是負(fù)數(shù)。這是因?yàn)槲业挠?jì)算機(jī)使用相同的二進(jìn)制形式來(lái)表示3000000000和-129496296,而計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制。所以,如果我們使用%u告訴printf輸出無(wú)符號(hào)整數(shù),輸出的就是3000000000;如果我們誤用了%d,那么輸

22、出的就是一個(gè)負(fù)數(shù)。不過(guò),如果我們把代碼中的3000000000改成96的話,輸出就不會(huì)出現(xiàn)異常。因?yàn)?6沒(méi)有超出int的表示范圍。然后,對(duì)于第二個(gè)printf,無(wú)論我們使用hd還是%d,輸出的結(jié)果都是一樣的。這是因?yàn)镃語(yǔ)言標(biāo)準(zhǔn)規(guī)定,當(dāng)short類(lèi)型值傳遞給函數(shù)時(shí),要自動(dòng)轉(zhuǎn)化成int類(lèi)型值。之所以轉(zhuǎn)化成int,是因?yàn)閕nt被設(shè)計(jì)為計(jì)算機(jī)處理效率最高的整數(shù)類(lèi)型。所以,對(duì)于short和int大小不同的計(jì)算機(jī)來(lái)說(shuō),把變量end轉(zhuǎn)化成int類(lèi)型再傳遞給函數(shù),速度更快。如此說(shuō)來(lái),h好像沒(méi)有存在意義。其實(shí)不然。我們可以用%hd來(lái)看看較大的整數(shù)類(lèi)型被截?cái)喑蓅hort類(lèi)型的時(shí)候會(huì)是什么樣的。而第三個(gè)printf,由于誤用%hd,導(dǎo)致輸出是1。這是因?yàn)?,如果long是32位的話,65537的二進(jìn)制形式便是00000000000000010000000000000001,而%hd命令printf輸出short類(lèi)型的值,從而導(dǎo)致printf只處理16位數(shù)據(jù)(假設(shè)short是16位的),最終導(dǎo)致輸出1。在前面的教程里,我們說(shuō)過(guò),保證格式限定符的數(shù)目和參數(shù)數(shù)目一致是我們的責(zé)任。同樣,保證格式限定符的類(lèi)型和參數(shù)類(lèi)型一致也是我們的責(zé)任!正如上面所說(shuō)的那樣

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論