C語言數(shù)據(jù)類型及表示范圍_第1頁
C語言數(shù)據(jù)類型及表示范圍_第2頁
C語言數(shù)據(jù)類型及表示范圍_第3頁
C語言數(shù)據(jù)類型及表示范圍_第4頁
C語言數(shù)據(jù)類型及表示范圍_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言各種數(shù)據(jù)類型在系統(tǒng)中占的字節(jié)和取值范圍基本類型包括字節(jié)型(char)、整型(int )和浮點型(float/doubleint ),和長度定義基本類型變量時,可以使用符號屬性signed、unsigned (對于char、 屬性short、Io ng (對于int、double )對變量的取值區(qū)間和精度進行說明。F面列舉了 Dev-C+下基本類型所占位數(shù)和取值范圍:符號屬性長度屬性基本型所占位數(shù)取值范圍輸入符舉例輸出符舉、%Le %Lgsign ed- char8-2A7 2A7-1%c%c、%d %uun sig ned- char80 2A8-1%c%c、%d %usig nedsh

2、ort int16-2A15 2A15-1%hdun sig nedshort int160 2A16-1%hu、%ho %hxsig ned-int 32-2A31 2A31-1%dun sig ned-int320 2A32-1%u、%o %xsig nedlong int32-2A31 2A31-1%ldun sig nedlong int320 2A32-1%lu、lo、%lxsig nedlong long int64-2A63 2A63-1%I64dun sig nedlong long int| 640 2A64-1%I64u、l64o、%I64x float 32+/- 3.4

3、0282e+038%f、%e %g-2A7 2A7-1%c%c、%d%udouble 64+/-1.79769e+308%lf 、%le、%lg %f、%e %gchar 8long double 96+/- 1.79769e+308 %Lf幾點說明:1. 注意!表中的每一行,代表一種基本類型?!啊贝砜墒÷?。例如:char、signed char、unsigned char 是三種互不相同的類型;int、short、Io ng也是三種互不相同的類型??梢允褂肅+的函數(shù)重載特性進行驗證,如void Fun c(char ch) void Fun c(sig ned char ch) void

4、Func(un sig ned char ch) 是三個不同的函數(shù)。2. char/sig ned char/u nsig ned char型數(shù)據(jù)長度為 1 字節(jié);char為有符號型,但與 sig ned char是不同的類型。注意!并不是所有編譯器都這樣處理,char型數(shù)據(jù)長度不一定為1字節(jié),char也不一定為有符號型。3. 將char/signed char轉(zhuǎn)換為int時,會對最高符號位1進行擴展,從而造成運算問題。所以,如果要處理的數(shù)據(jù)中存在字節(jié)值大于127的情況,使用unsigned char較為妥當。程序中若涉及位運算,也應該使用unsigned型變量。4. char/signed

5、char/unsigned char輸出時,使用格式符 c (按字符方式);或使用%d %u %x/%X %o按整數(shù)方式輸出;輸入時,應使用G若使用整數(shù)方式,Dev-C+會給出警告,不建議這樣使用。5. int 的長度,是16位還是32位,與編譯器字長有關(guān)。16位編譯器(如TC使用的編譯器)下,int為16位;32位編譯器(如 VC使用的編譯器cl.exe )下,int 為32位。6. 整型數(shù)據(jù)可以使用 d(有符號10進制)、o(無符號8進制)或x/%X(無符號16進制) 方式輸入輸出。而格式符 %u表示unsigned,即無符號10進制方式。7. 整型前綴h表示short , l表示long

6、 。輸入輸出short/unsignedshort時,不建議直接使用int的格式符%d/%u等,要加前綴h。這個習慣性錯誤,來源于 TC TC下,int的長度和默認符號屬性,都與short 一致,于8. 關(guān)于 long long 類型的輸入輸出:"lld"和"llu"是 linux 下 gcc/g+ 用于 long long int類型(64 bits)輸入輸出的格式符。而 "l64d"和"164則是Microsoft VC+ 庫里用于輸入輸出nt64類型的格式說明。Dev-C+使用的編譯器是 Mingw32, Mingw3

7、2是x86-win32 gcc子項目之一,編譯器核心還是linux下的gcc。進行函數(shù)參數(shù)類型檢查的是在編譯階段, gcc編譯器對格式字符串進行檢查,顯然它不認得"l64d",所以將給出警"unknowncon version type character 'I' in format”。對于 "lld"和"%llu" ,gcc 理所當然地接受了。Mingw32在編譯期間使用 gcc的規(guī)則檢查語法,在連接和運行時使用的卻是Microsoft庫。這個庫里的printf 和scanf函數(shù)當然不認識linux gcc

8、下"%lld"和"llu",但對"l64d" 和"I64u",它則是樂意接受,并能正常工作的。9. 浮點型數(shù)據(jù)輸入時可使用 f、e/%E或%g/%Gscanf會根據(jù)輸入數(shù)據(jù)形式,自動處理。輸出時可使用f (普通方式)、e/%E(指數(shù)方式)或 g/%G(自動選擇)。10. 浮點參數(shù)壓棧的規(guī)則:float(4 字節(jié))類型擴展成double(8 字節(jié))入棧。所以在輸入時,需要區(qū)分float(%f) 與double(%lf),而在輸出時,用 %f即可。printf 函數(shù)將按照 double型的規(guī)則對壓入堆棧的float(已

9、擴展成double)和double型數(shù)據(jù)進行輸出。如果在輸出時指定%lf格式符,gcc/mingw32編譯器將給出一個警告。11. Dev-C+(gcc/mingw32)可以選擇 float 的長度,是否與 double 一致。12. 前綴 L 表示 long ( double )。雖然long double比double長4個字節(jié),但是表示的數(shù)值范圍卻是一樣的。long double類型的長度、精度及表示范圍與所使用的編譯器、操作系統(tǒng)等有關(guān)。轉(zhuǎn):http:/blog.si .c n/s/blog_60ad6bcf0100ehpu.html?retcode=01.整型數(shù)據(jù)類型C定義了 5種整型

10、數(shù)據(jù)類型。整型數(shù)據(jù)類型表序 號類型名稱說明字節(jié)數(shù)取值范圍1sig ned char有符號的單字節(jié)整數(shù)類 型1-128+1272short int短整型2-32768+327673nt整型4-2147438648+21474386474long int長整型4-2147438648+21474386475long long int長長整型8-9223372036854775808+-92例 輸出各種整型類型的字節(jié)數(shù)#in elude int mai n(void) prin tf("sizeof(sig ned char) = %d/n", sizeof(sig ned ch

11、ar);printf("sizeof(short int) = %d/n", sizeof(short int); /* sizeof的結(jié)果都是 int 型 */prin tf("sizeof( int) = %d/n", sizeof(i nt);prin tf("sizeof( long int) = %d/n", sizeof(l ong in t);printf("sizeof(long long int) = %d/n", sizeof(long long int);return 0;編譯和運行結(jié)果roo

12、tlocalhost ccc# gcc c15.crootlocalhost ccc# ./a.outsizeof(sig ned char) = 1sizeof(short int) = 2sizeof(i nt) = 4sizeof(lo ng int) = 4sizeof(lo ng long int) = 8程序說明:sizeof是字節(jié)操作符,使用方式,sizeof (數(shù)據(jù)類型)。sizeof的作用 是得到數(shù)據(jù)類型所占的字節(jié)數(shù)。我們運行程序使用的環(huán)境是Redhat 5 Linux,編譯器是GCC。2.無符號整數(shù)類型對應有符號類型,還有無符號整數(shù)類型。無符號整數(shù)類型表序號|類型名稱|字節(jié)

13、數(shù)|取值范1un sig ned char102552un sig n short int20655353un sig ned int4042949672954un sig ned long int4042949672955un sig n long long int80184467440737095例 輸出各種無符號整數(shù)類型的字節(jié)數(shù)#in elude int mai n(void) prin tf("sizeof( un sig ned char) = %d/n", sizeof( un sig ned char);printf("sizeof(unsigned

14、 short int) = %d/n", sizeof(unsigned short int); /* sizeof的結(jié)果都是int型*/prin tf("sizeof( un sig ned int) = %d/n", sizeof( un sig ned in t);printf("sizeof(unsigned long int) = %d/n", sizeof(unsigned long int);printf("sizeof(unsigned long long int) = %d/n", sizeof(unsig

15、ned long long int);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c16.crootlocalhost ccc# ./a.outsizeof( un sig ned char) = 1sizeof( un sig ned short int) = 2sizeof( un sig ned int) = 4sizeof( un sig ned long int) = 4sizeof( un sig ned long long int) = 83.整型常量整型常量是指用以表示整型數(shù)值的常量,分為短整型( short int )、整型(int)、 長整

16、型(long int )和長長整型(long long int )四種。C默認整型(int)。各種 類型整型常量進制表示表(后綴不區(qū)分大小寫)序號數(shù)據(jù)類型八進制1整型01122長整型 ( l)011213長長整型(ll)0112ll4無符號整型(u)0112u5無符號長整型 ( ul)0112ul無符號長6長整型(ull)|0112ull74ull4字符數(shù)據(jù)類型C語言中字符型數(shù)據(jù)只有一種,即 char型數(shù)據(jù)。一般也 把char直接稱為字符型。字符型占用內(nèi)存空間最少,一 般占用一個字節(jié),存儲在 char類型變量的整數(shù)可以表示 為有符號或無符號的值,這取決于編譯器。例字符型數(shù)據(jù)類型的字節(jié)長度#in

17、 elude int main(v oid) prin tf("sizeof(char) = %d/n", sizeof(char);prin tf("sizeof(sig ned char) = %d/n", sizeof(sig ned char); printf("sizeof(unsignedchar) = %d/n", sizeof(unsignedchar);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c17.c rootlocalhost ccc# ./a.out sizeof(char

18、) = 1sizeof(sig ned char) = 1 sizeof( un sig ned char) = 1數(shù)據(jù)類型字節(jié)長度精度數(shù)量級范圍o.II5字符變量字符型變量也分字符變量是用于存儲字符型數(shù)值的變量 為兩種:有符號和無符號型。語法結(jié)構(gòu):sig ned char ch1;un sig ned char ch2;例#in clude int main(v oid) char ch1 = 7n'un sig ned char ch2 = '/t' char ch3 = 48;prin tf("ch1 = %c, %d/n", ch1, ch1

19、);prin tf("ch2 = %c, %d/n", ch2, ch2);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c18.crootlocalhost ccc# ./a.outchi =1, 10ch2 = , 9ch3 = 0, 48程序說明:轉(zhuǎn)義符'/n'是換行符,第一個printf函數(shù)中%c 處會替換為'/n',輸出到終端上則會替換為換行,我們可以 看到輸出的第一個方括號中間發(fā)生換行。%d是c1的ASCII碼值代替。轉(zhuǎn)義符'/t'是水平制表符,第二個 printf 里的%c會替代為

20、'/t',輸出到終端上。數(shù)值48對應的ASCII 碼是0,所以對應輸出到終端上是一個0。6.浮點型數(shù)據(jù)類型C語言定義了三種浮點數(shù)據(jù)類型:?float,單精度?double,雙精度?long double,長雙精度C標準中對不同類型的浮點數(shù)有不同的規(guī)定,編譯器不同或硬件條件不同,字節(jié)長度也不相同。例測試三種浮點型字節(jié)長度#in cludeint main(v oid) prin tf("sizeof(float) = %d/n", sizeof(float);prin tf("sizeof(double) = %d/n", sizeof(d

21、ouble);prin tf("sizeof(l ong double) = %d/n", sizeof(l ong double);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c19.crootlocalhost ccc# ./a.outsizeof(float) = 4 sizeof(double) = 8 sizeof(lo ng double) = 12浮點型的字節(jié)長度、精度、數(shù)量級范圍和輸出輸入格式表 序號1float(f)47-38382double8約16-3083083long double(1)12約19-49324932

22、7.浮點型精度浮點型精度從低到高排列為float、double和longdouble。例檢查浮點型精度#in eludelongint main(v oid) float f = 0.9876543210123456789012f;/* 可以不使用 f后綴,但可能會出現(xiàn) warning */double d = 0.9876543210123456789012;long double ld = 0.98765432101234567890121; /* 使用后綴l或L */必須prin tf("f/t= %.25f/n", f); prin tf("d/t= %.

23、25lf/n", d);prin tf("ld/t= %.25llf/n", ld);return 0;編譯和運行結(jié)果rootlocalhost ccc# gee c20.crootlocalhost ccc# ./a.outf = 0.9876543283462524414062500 d = 0.9876543210123456262294894 ld = 0.9876543210123456789217150數(shù)據(jù)類型符 位號指數(shù)位基數(shù)位8.浮點型的存儲方式浮點型數(shù)值以科學計數(shù)法的表示形式存儲在內(nèi)存中。浮點型的內(nèi)存形式包含二個部分:1)符號位符號位浮點型的符號

24、位只有一位,為最高位。該位為 表示負數(shù),該位為0,為非負數(shù)。2)指數(shù)位1,浮點型的指數(shù)位以補碼形式存儲,是科學計數(shù)法的指數(shù)部分。3)基數(shù)位基數(shù)位是浮點型的最后一位,這個位決定數(shù)值的精度。浮點型儲存分段表序號1float18232double111523long double11564例 檢測float、double和long double的存儲狀態(tài)#i ncludeint mai n(void) float fone = 2.0;float ftwo = 2.5;double done = 2.0;double dtwo = 2.5;long double Idone = 2.0;long d

25、ouble ldtwo = 2.5;/*輸出float型數(shù)據(jù)在內(nèi)存中的存儲內(nèi)容*/prin tf("float (2.0) = %08x/n", *(i nt *)(&fon e);prin tf("float (2.5) = %08x/n", *(i nt *)(&ftwo);/*輸出double型數(shù)據(jù)在內(nèi)存中的存儲內(nèi)容*/printf("double(2.0) = %016llx/n", *(long long *)(&done); printf("double(2.5) = %016llx/n&

26、quot;, *(long long *)(&dtwo);/*輸出long double型數(shù)據(jù)在內(nèi)存中的存儲內(nèi)容*/prin tf("lo ndou(2.0) = %08x %08x %08x/n",*(i nt *)(&d on e) + 2 ),*(i nt *)(&ld on e) + 1 ),*(i nt *)(&don e);prin tf("lo ndou(2.5) = %08x %08x %08x/n",*(i nt *)(& ldtwo) + 2 ),*(i nt *)(&ldtwo) +

27、1 ),*(i nt *)(&ldtwo);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c21.crootlocalhost ccc# ./a.outfloat (2.0) = 40000000float (2.5) = 40200000double(2.0) = 4000000000000000double(2.5) = 4004000000000000Ion dou(2.0) = 00004000 80000000 00000000Ion dou(2.5) = 00004000 a0000000 00000000分享:人人網(wǎng)開心網(wǎng)搜狐微博推薦給朋舉

28、報來自:albert_wei > 未命名獻花(0)+ 1i.整型數(shù)據(jù)類型C定義了 5種整型數(shù)據(jù)類型。整型數(shù)據(jù)類型表序 號類型名稱說明字節(jié)數(shù)取值范圍1sig ned char有符號的單字節(jié)整數(shù)類 型1-128+1272short int短整型2-32768+327673nt整型4-2147438648+21474386474ong int長整型4-2147438648+21474386475ong long int長長整型8-9223372036854775808+-92例 輸出各種整型類型的字節(jié)數(shù)#in clude int mai n(void) prin tf("sizeof

29、(sig ned char) = %d/n", sizeof(sig ned char);printf("sizeof(short int) = %d/n", sizeof(short int); /* sizeof的結(jié)果都是 int 型 */prin tf("sizeof( int) = %d/n", sizeof(i nt);prin tf("sizeof( long int) = %d/n", sizeof(l ong in t);printf("sizeof(long long int) = %d/n&qu

30、ot;, sizeof(long long int);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c15.crootlocalhost ccc# ./a.outsizeof(sig ned char) = 1 sizeof(short int) = 2 sizeof(i nt) = 4sizeof(lo ng int) = 4sizeof(lo ng long int) = 8程序說明:sizeof是字節(jié)操作符,使用方式,sizeof (數(shù)據(jù)類型)。sizeof的作用 是得到數(shù)據(jù)類型所占的字節(jié)數(shù)。我們運行程序使用的環(huán)境是Redhat 5 Linux,編譯器是G

31、CC。2.無符號整數(shù)類型對應有符號類型,還有無符號整數(shù)類型無符號整數(shù)類型表序號類型名稱字節(jié)數(shù)取值范1un sig ned char102552un sig n short int206553un sig ned int404294un sig ned long int404295un sig n long long int80184例 輸出各種無符號整數(shù)類型的字節(jié)數(shù)#in clude int mai n(void) prin tf("sizeof( un sig ned char) = %d/n", sizeof( un sig ned char);printf("

32、;sizeof(unsigned short int) = %d/n", sizeof(unsigned short int); /* sizeof 的結(jié)果都是int型*/prin tf("sizeof( un sig ned int) = %d/n", sizeof( un sig ned in t);printf("sizeof(unsigned long int) = %d/n", sizeof(unsigned long int);printf("sizeof(unsigned long long int) = %d/n&qu

33、ot;, sizeof(unsigned long long int);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c16.crootlocalhost ccc# ./a.outsizeof( un sig ned char) = 1sizeof( un sig ned short int) = 2sizeof( un sig ned int) = 4sizeof( un sig ned long int) = 4sizeof( un sig ned long long int) = 83.整型常量整型常量是指用以表示整型數(shù)值的常量,分為短整型( short

34、int )、整型(int)、 長整型(long int )和長長整型(long long int )四種。C默認整型(int)。各種 類型整型常量進制表示表(后綴不區(qū)分大小寫)序號數(shù)據(jù)類型八進制1整型01122長整型 ( l)011213長長整型(ll)0112114無符號整型(u)0112u5無符號長整型 ( ul)0112ul6無符號長 長整型(ull)0112ull4字符數(shù)據(jù)類型C語言中字符型數(shù)據(jù)只有一種,即 char型數(shù)據(jù)。一般也 把char直接稱為字符型。字符型占用內(nèi)存空間最少,一 般占用一個字節(jié),存儲在 char類型變量的整數(shù)可以表示 為有符號或無符號的值,這取決于編譯器。例字符型

35、數(shù)據(jù)類型的字節(jié)長度#in cludeint main(v oid) prin tf("sizeof(char) = %d/n", sizeof(char);prin tf("sizeof(sig ned char) = %d/n", sizeof(sig ned char); printf("sizeof(unsignedchar) = %d/n", sizeof(unsignedchar);數(shù)據(jù)類型字節(jié)長度精度編譯和運行結(jié)果rootlocalhost ccc# gcc c17.crootlocalhost ccc# ./a.outs

36、izeof(char) = 1return 0;sizeof(sig ned char) = 1 sizeof( un sig ned char) = 15字符變量字符變量是用于存儲字符型數(shù)值的變量。字符型變量也分 為兩種:有符號和無符號型。語法結(jié)構(gòu):sig ned char chi;un sig ned char ch2;例#in cludeint main(v oid) char ch1 = 7n'un sig ned char ch2 = 7t'char ch3 = 48;printf("ch1 = %c, %d/n", ch1, ch1);prin

37、tf("ch2 = %c, %d/n", ch2, ch2); prin tf("ch3 = %c, %d/n", ch3, ch3);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c18.crootlocalhost ccc# ./a.outch1 =1, 10ch2 = , 9ch3 = 0, 48程序說明:轉(zhuǎn)義符'/n'是換行符,第一個printf函數(shù)中%c 處會替換為'/n',輸出到終端上則會替換為換行,我們可以 看到輸出的第一個方括號中間發(fā)生換行。%d是c1的ASCII碼值代替。轉(zhuǎn)

38、義符'/t'是水平制表符,第二個 printf 里的%c會替代為'/t',輸出到終端上。數(shù)值48對應的ASCII 碼是0,所以對應輸出到終端上是一個0。6.浮點型數(shù)據(jù)類型C語言定義了三種浮點數(shù)據(jù)類型:?float,單精度 ?double,雙精度 ?long double,長雙精度C標準中對不同類型的浮點數(shù)有不同的規(guī)定,編譯器不同或硬件條件不同- 字節(jié)長度也不相同。例測試三種浮點型字節(jié)長度#in eludeint main(v oid) printf("sizeof(float) = %d/n", sizeof(float);prin tf(&

39、quot;sizeof(double) = %d/n", sizeof(double);prin tf("sizeof(l ong double) = %d/n", sizeof(l ong double);return 0;編譯和運行結(jié)果rootlocalhost ccc# gcc c19.crootlocalhost ccc# ./a.out sizeof(float) = 4 sizeof(double) = 8 sizeof(lo ng double) = 12浮點型的字節(jié)長度、精度、數(shù)量級范圍和輸出輸入格式表 序號1float(f)47-3838%2do

40、uble8約16-308308%3long double(1)12約19-49324932 %7.浮點型精度浮點型精度從低到高排列為float、double和long longdouble。例檢查浮點型精度#in cludeint main(v oid) float f = 0.9876543210123456789012f;/* 可以不使用 f后綴,但可能會出現(xiàn) warning */double d = 0.9876543210123456789012;long double ld = 0.98765432101234567890121; /*必須使用后綴l或L */prin tf("f/t= %.25f/n", f);prin tf("d/t= %.25lf/n", d);prin tf("ld/t= %.25llf/n", ld);return 0;k數(shù)據(jù)類型符號位指數(shù)位基數(shù)位偏M編譯和運行結(jié)果rootlocalhost ccc# gcc c20.crootlocalhost ccc# ./a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論