- 相關(guān)推薦
C語(yǔ)言中的整數(shù)(short,int,long)
整數(shù)是編程中常用的一種數(shù)據(jù),C語(yǔ)言使用int來(lái)定義整數(shù)(int 是 integer 的簡(jiǎn)寫)。歡迎大家閱讀!更多相關(guān)信息請(qǐng)關(guān)注相關(guān)欄目!
現(xiàn)代操作系統(tǒng)中 int 一般占用4個(gè)字節(jié)內(nèi)存,共計(jì)32位(Bit)。如果不考慮正負(fù)數(shù),當(dāng)所有的位都為1時(shí)它的值最大,為 232-1 = 4,294,967,295 ≈ 43億,這是一個(gè)很大的數(shù),實(shí)際開發(fā)中很少用到,而諸如 1、99、12098 等較小的數(shù)使用頻率反而較高。
使用4個(gè)字節(jié)保存較小的整數(shù)綽綽有余,會(huì)空閑出兩三個(gè)字節(jié)來(lái),這些字節(jié)就白白浪費(fèi)掉了,不能再被其他數(shù)據(jù)使用,F(xiàn)在個(gè)人電腦的內(nèi)存都比較大了,配置低的也有2G,浪費(fèi)一些內(nèi)存不會(huì)帶來(lái)明顯的損失;而在C語(yǔ)言被發(fā)明的早期,或者在單片機(jī)和嵌入式中,內(nèi)存都是非常稀缺的資源,所有的程序都在盡力節(jié)省內(nèi)存。
反過(guò)來(lái)說(shuō),43億雖然已經(jīng)很大,但要表示全球人口數(shù)量還是不夠,必須要讓整數(shù)占用更多的內(nèi)存,才能表示更大的值。
讓整數(shù)占用更少的內(nèi)存可以在 int 前邊加short,讓整數(shù)占用更多的內(nèi)存可以在 int 前邊加long,例如:
short int a = 10;
short int b, c = 99;
long int m = 102023;
long int n, p = 562131;
這樣 a、b、c 只占用2個(gè)字節(jié)的內(nèi)存,而 m、n、p 可能占用8個(gè)字節(jié)的內(nèi)存。
也可以將 int 省略,只寫 short 和 long,如下所示:
short a = 10;
short b, c = 99;
long m = 102023;
long n, p = 562131;
這樣的寫法更加簡(jiǎn)潔,實(shí)際開發(fā)中常用。
總結(jié)起來(lái),C語(yǔ)言中 共有三種整數(shù)類型,分別是 short、int 和 long。int 稱為整型,short 稱為短整型,long 稱為長(zhǎng)整型。
整數(shù)的長(zhǎng)度
C語(yǔ)言并沒有嚴(yán)格規(guī)定 short、int、long 所占用的字節(jié)數(shù),只做了寬泛的限制:
short 至少占用2個(gè)字節(jié)。
int 建議為一個(gè)機(jī)器字長(zhǎng)。32位環(huán)境下機(jī)器字長(zhǎng)為4字節(jié),64位環(huán)境下機(jī)器字長(zhǎng)為8字節(jié)。
short 的長(zhǎng)度不能大于 int,long 的長(zhǎng)度不能小于 int。
總結(jié)起來(lái),它們的長(zhǎng)度(所占字節(jié)數(shù))關(guān)系為:
short <= int <= long
這就意味著,short 并不一定真的”短“,long 也并不一定真的”長(zhǎng)“,它們有可能和 int 占用相同的字節(jié)數(shù)。
在16位環(huán)境下,short 為2個(gè)字節(jié),int 為2個(gè)字節(jié),long 為4個(gè)字節(jié)。16位環(huán)境多用于單片機(jī)和低級(jí)嵌入式系統(tǒng),在PC和服務(wù)器上基本都看不到了。
對(duì)于32位的 Windows、Linux 和 OS X,short 為2個(gè)字節(jié),int 為4個(gè)字節(jié),long 也為4個(gè)字節(jié)。PC和服務(wù)器上的32位系統(tǒng)占有率也在慢慢下降,嵌入式系統(tǒng)使用32位越來(lái)越多。
在64位環(huán)境下,不同的操作系統(tǒng)會(huì)有不同的結(jié)果,如下所示(長(zhǎng)度以字節(jié)計(jì)):
目前我們使用較多的PC系統(tǒng)為 Win XP、Win 7、Win 8、Win 10、Mac OS X、Linux,short 和 int 的長(zhǎng)度都是固定的,分別為2和4,大家可以放心使用,long 的長(zhǎng)度在 Win64 和類Unix系統(tǒng)下會(huì)有所不同,使用時(shí)要注意移植性。
獲取某個(gè)數(shù)據(jù)類型的長(zhǎng)度可以使用 sizeof 操作符,如下所示:
#includeint main(){short a = 10;int b = 100;long c = 1000;char d = 'X';int a_length = sizeof a;int b_length = sizeof(int);printf("a=%d, b=%d, c=%d, d=%d ", a_length, b_length, sizeof(c), sizeof(char));return 0;}
在Win7下的運(yùn)行結(jié)果為:
a=2, b=4, c=4, d=1
sizeof 用來(lái)獲取某個(gè)數(shù)據(jù)類型或變量所占用的字節(jié)數(shù),如果后面跟的是變量名稱,那么可以省略( ),如果跟的是數(shù)據(jù)類型,就必須帶上( )。
需要注意的是,sizeof 是C語(yǔ)言中的操作符,不是函數(shù),所以可以不帶( ),后面會(huì)詳細(xì)講解。
不同進(jìn)制的整數(shù)
C語(yǔ)言中的整數(shù)除了可以使用十進(jìn)制,還可以使用八進(jìn)制和十六進(jìn)制。
1) 八進(jìn)制
八進(jìn)制由 0~7 八個(gè)數(shù)字組成,使用時(shí)必須以0開頭(注意是數(shù)字 0,不是字母 o),例如:
//合法的八進(jìn)制數(shù)int a = 015; //十進(jìn)制為 13int b = -0101; //十進(jìn)制為 -65int c = 0177777; //十進(jìn)制為 65535//非法的八進(jìn)制int m = 256; //無(wú)前綴 0,相當(dāng)于十進(jìn)制int n = 03A2; //A不是有效數(shù)字
2) 十六進(jìn)制
十六進(jìn)制由數(shù)字 0~9、字母 A~F 或 a~f 組成,使用時(shí)必須以0x或0X(不區(qū)分大小寫)開頭,例如:
//合法的十六進(jìn)制int a = 0X2A; //十進(jìn)制為 42int b = -0XA0; //十進(jìn)制為 -160int c = 0xffff; //十進(jìn)制為 65535//非法的十六進(jìn)制int m = 5A; //無(wú)前綴 0Xint n = 0X3H; //H不是有效數(shù)字
3) 十進(jìn)制
十進(jìn)制由 0~9 十個(gè)數(shù)字組成,沒有任何前綴,和我們平時(shí)的書寫格式一樣,不再贅述。
注意:C語(yǔ)言中只能使用八進(jìn)制、十進(jìn)制和十六進(jìn)制,不能直接使用二進(jìn)制,它沒有特定的前綴。
各種整數(shù)的輸出
在使用 printf 輸出整數(shù)時(shí),不同的控制字符會(huì)有不同的輸出格式。
1) 輸出 int 使用%d,輸出 short 使用%hd,輸出 long 使用%ld。請(qǐng)看下面的例子:
#includeint main(){short a = 100;int b = 010;long c = 0XFFFF;printf("a=%hd, b=%d, c=%ld ", a, b, c);return 0;}
運(yùn)行結(jié)果:
a=100, b=8, c=65535
2) 輸出十進(jìn)制使用%d,輸出八進(jìn)制使用%o(注意是字母 o,不是數(shù)字 0),輸出十六進(jìn)制使用%x或%X。如果希望帶上前綴,可以加#,例如 %#d、%#o、%#x、%#X。請(qǐng)看下面的例子:
#include#includeint main(){int a = 100, b = 0270, c = 0X2F;printf("a(d)=%d, d(#d)=%#d ", a, a);printf("a(o)=%o, d(#o)=%#o ", b, b);printf("c(x)=%x, c(#x)=%#x, c(X)=%X, c(#X)=%#X ", c, c, c, c);system("pause");return 0;}
運(yùn)行結(jié)果:
a(d)=100, d(#d)=100
a(o)=270, d(#o)=0270
c(x)=2f, c(#x)=0x2f, c(X)=2F, c(#X)=0X2F
需要注意的是,十進(jìn)制數(shù)沒有前綴,所以 %d 和 %#d 的輸出結(jié)果一樣。
【C語(yǔ)言中的整數(shù)short,int,long】相關(guān)文章:
C 語(yǔ)言中宏的使用08-02
C語(yǔ)言中assert的用法06-02
C語(yǔ)言中的字符(char)09-24
C語(yǔ)言中sizeof的用法09-09
c語(yǔ)言中什么是變量08-22
c語(yǔ)言中bit的用法11-01
C語(yǔ)言中的鏈接編寫05-26
C語(yǔ)言中volatile的含義08-14