?
1、介紹數(shù)據(jù)
在定義變量時(shí)需要指定變量的類型。常量也是區(qū)分類型的。因?yàn)閿?shù)據(jù)都是存放在內(nèi)存中的單元中的,它 是具體存在的,而存儲(chǔ)單元是有限制大小字節(jié)的,每一個(gè)存儲(chǔ)單元存放數(shù)據(jù)的范圍是有限的。所以必須對(duì)數(shù)據(jù)分配儲(chǔ)存單元的安排,包括儲(chǔ)存單元的長(zhǎng)度(占用字節(jié)數(shù))以及數(shù)據(jù)存儲(chǔ)的形式,不同類型的存儲(chǔ)。也是為了方便編程人員對(duì)數(shù)據(jù)進(jìn)行操作,不然一堆數(shù)據(jù)放下來(lái),都不知道哪個(gè)是哪個(gè),這樣分類了之后大大提升了編程效率。
2、 整型類型
基本整型? int :
編譯系統(tǒng)一般會(huì)分配2個(gè)或4個(gè)字節(jié)(具體是看編譯環(huán)境),1個(gè)字節(jié)(8個(gè)二進(jìn)位),整數(shù)是以補(bǔ)碼的形式存放在儲(chǔ)存單元中的。如 5: 二進(jìn)制是101;如果用兩個(gè)字節(jié)存放 正數(shù)的補(bǔ)碼和源碼都是:0000 0000? 0000 0101
負(fù)5則是要先求出源碼,然后再按位取反,再加1? 才是負(fù)數(shù)的補(bǔ)碼? 如
(源碼)0000? 0000? 0000? 0101
(按位取反)1111 1111 1111 1010? ? ? (負(fù)數(shù)補(bǔ)碼)1111 1111 1111 1011
再存放整數(shù)的存儲(chǔ)單元中,最左邊(首位)一位是用來(lái)表示符號(hào)的,0表示正數(shù),1表示負(fù)數(shù)
現(xiàn)在的編譯環(huán)境一般都是分配的是4個(gè)字節(jié)(32位),范圍是-2^31到2^31-1? 即 -214 748 3648到-214 748 3647
短整型 short int :
短整型一般都是分配兩個(gè)字節(jié)存儲(chǔ)方式與int相同,系統(tǒng)一般是分配2個(gè)字節(jié)(16位),數(shù)值能表示的范圍是-32768-32767(比int少)
長(zhǎng)整型 long int :
系統(tǒng)會(huì)分配4個(gè)字節(jié)(32位),那么長(zhǎng)整型所能表示的數(shù)字范圍就是-2^63----2^63-1了。與int不相同的是int 至少有2個(gè)字節(jié)以上,long至少有4個(gè)字節(jié)以上,并且sizeof(int )<=sizeof(long int)。
有些編譯環(huán)境的int只是兩個(gè)字節(jié)而已
雙長(zhǎng)整型 long long int:
系統(tǒng)會(huì)分配8個(gè)字節(jié)(64位),那么長(zhǎng)整型所能表示的數(shù)字范圍就是-2^63----2^63-1了。(比長(zhǎng)整型長(zhǎng)得多)
注*? 當(dāng)然上面所說(shuō)的 在64位系統(tǒng)下,而且還是要看具體的編譯環(huán)境,如果在32位的機(jī)子或者比較古老編譯環(huán)境的上面,數(shù)值能表示情況和分配字節(jié)會(huì)會(huì)有所不同。
unsigned(無(wú)符號(hào)類型)
在整數(shù)中,有 有符號(hào)和無(wú)符號(hào)之稱,一般默認(rèn)都是有符號(hào)的,在變量定義前加上,unsigned 關(guān)鍵字 ,就可將整型數(shù)據(jù)轉(zhuǎn)換為無(wú)符號(hào)類型數(shù)據(jù),也就是數(shù)學(xué)中的絕對(duì)值數(shù)字。一般默認(rèn)初始化都是有符號(hào)的。
實(shí)型數(shù)據(jù)不能加signed(有符號(hào))或unsiged(無(wú)符號(hào))修飾符。
由于無(wú)符號(hào)數(shù)據(jù)最高位不再用來(lái)表示符號(hào),而用來(lái)表示數(shù)字,所以無(wú)符號(hào)的存儲(chǔ)會(huì)比有符號(hào)的存儲(chǔ)范圍擴(kuò)大一倍。即65535位。如-1在兩字節(jié)中存放的補(bǔ)碼形式是 1111 1111 1111 1111? 最開(kāi)始的一位數(shù)字就表示的符號(hào)位 ,數(shù)值就只有2^15位。但是如果它加上unsigned無(wú)符號(hào),那么第一位將不再代表符號(hào),所以數(shù)值也就相應(yīng)增加到2^16位了。
字符型 char:
字符數(shù)據(jù)在內(nèi)存中的儲(chǔ)存是:每個(gè)字符變量被分配一個(gè)字節(jié)的空間,所以一個(gè)單引號(hào)只能放一個(gè)字符,字符值是以ASCII碼形式存放在存儲(chǔ)單元中的。字符可以是任意的字符,但數(shù)字被定義成字符后就不能參與數(shù)值運(yùn)算了 如 ‘ 5 ‘ 和5是不同的,’ 5 ‘是字符常量,它只是表示一個(gè)形狀位‘5’的符號(hào),在需要時(shí)按原樣輸出而已,并不是以數(shù)值存放的,所以不能參與運(yùn)算。
char是int的一種特殊形式。在一般時(shí)候,也可以定義位char類型的變量來(lái)像int的變量一樣操作。
可以將0-127的整數(shù)賦值給一個(gè)字符變量。如果將負(fù)數(shù)賦值下去,由于字符型只能讀取一個(gè)字符,所以前面的符號(hào)將不會(huì)被讀取。
定義字符變量,實(shí)際上是定義一個(gè)字節(jié)的整型變量,它只不過(guò)是用來(lái)存放字符而已,
?
char a = '-6';char b = a;printf("%c", b);//結(jié)果是輸出6
?
signed? char(有符號(hào)) 能表示的數(shù)值范圍是-2^7到2^7-1? 即-128-127
unsigned char (無(wú)符號(hào))能表示的數(shù)值范圍 是2^8-1 即 0-255
(還有一種字符串形式數(shù)據(jù)類型,后面會(huì)詳細(xì)介紹)
布爾型 bool:
在使用次類型前需要添加預(yù)處理頭文件命令#include,然后才可以定義定義次變量 如bool a;布爾型的值只有兩個(gè):false(假)和true(真)。false的值為0,true的值是1(或者是非0的值都是),bool只占用一個(gè)字節(jié)。
_BOOL長(zhǎng)度視實(shí)際環(huán)境來(lái)定,一般可認(rèn)為是4個(gè)字節(jié)。(這個(gè)是不用頭文件可以定義的)但是類型值只有0和1這兩個(gè)值。
3、浮點(diǎn)型(實(shí)數(shù)型)
在C語(yǔ)言中,實(shí)數(shù)是以指數(shù)形式存放在內(nèi)存中的,一個(gè)小數(shù)表示為指數(shù)的形式有很多,如3.14159,可以表示為 0.0314159*10^2或314.159*10^-2 等等。
由于它小數(shù)點(diǎn)的位置可以移動(dòng),所以叫它浮點(diǎn)數(shù)。所有的浮點(diǎn)數(shù)類型的數(shù)值以二進(jìn)制指數(shù)形式存放在內(nèi)存中,在儲(chǔ)存中,系統(tǒng)將小數(shù)部分和指數(shù)部分分別存放。
存儲(chǔ)分為三部分:符號(hào)位,小數(shù)位,指數(shù)位是以2冪次來(lái)表示的。存儲(chǔ)方式都是用科學(xué)計(jì)數(shù)法來(lái)存儲(chǔ)數(shù)據(jù)的 如:133.5(在內(nèi)存中)符號(hào)位(0為正)階碼(指數(shù)位)尾數(shù)(小數(shù)點(diǎn)后的數(shù))
135.5單精度的浮點(diǎn)數(shù),先轉(zhuǎn)整數(shù)135轉(zhuǎn)換成二進(jìn)制為1000 0101,然后再轉(zhuǎn)小數(shù)的5轉(zhuǎn)換為0.1,則135.5二進(jìn)制為1000 0101.1。
這個(gè)表示尾數(shù)? 然后首先要用科學(xué)計(jì)數(shù)法的形式表示出來(lái),1000 0101.1科學(xué)計(jì)數(shù)法就是1.0000 1011*2^7
這里的階碼用移碼來(lái)表示,float的偏移量為127.階碼位是8位,那么這里的階碼就是127+7=134;將134轉(zhuǎn)為二進(jìn)制是1000 0110;
由于規(guī)定小數(shù)點(diǎn)前面都為1,因此在計(jì)算機(jī)中,將不會(huì)存儲(chǔ)小數(shù)點(diǎn)前面的1,這里的尾數(shù)就為00001011。其后全部補(bǔ)0,將其補(bǔ)充夠23位數(shù)。這里是正數(shù),所以符號(hào)位為0
因此數(shù)字在內(nèi)存中存儲(chǔ)為:0100 0011 0000 0101 1000 0000 0000 0000(四個(gè)字節(jié))
**由于用二進(jìn)制表示一個(gè)浮點(diǎn)數(shù)對(duì)于存儲(chǔ)單元來(lái)說(shuō)長(zhǎng)度是有限的,因此不能得到完全精準(zhǔn)的值,只能保持有限的精確度。小數(shù)部分占的位數(shù)越多。有效數(shù)字越多,指數(shù)部分占的位數(shù)越多,則能表示的數(shù)值范圍越大。
**偏移量:是指浮點(diǎn)數(shù)表示法中的 指數(shù)域 的 編碼值 為指數(shù)的 實(shí)際值 加上某個(gè)固定的值,用IEEE 754 國(guó)際標(biāo)準(zhǔn)規(guī)定該 固定值 為 2 的 (e?1)次方減 1 其中的e 為 存儲(chǔ)指數(shù)的單位元 的長(zhǎng)度 (即有幾個(gè) bit) (就是看一個(gè)浮點(diǎn)類型能表示指數(shù)部分最大范圍)
單精度浮點(diǎn)型 float :
單精度浮點(diǎn)型字節(jié)數(shù)為4個(gè)字節(jié),有效數(shù)字6-7個(gè),小數(shù)長(zhǎng)度23位(24的話是包括符號(hào)位)。指數(shù)域是8位單位元,固定偏移值是2 的 (7)次方減 1, 就是 2的七次方減1,等于 127
(取值范圍見(jiàn)圖)
雙精度浮點(diǎn)型 double:
雙精度浮點(diǎn)型存儲(chǔ)字節(jié)數(shù)為8個(gè)字節(jié),有效數(shù)字達(dá)到15個(gè),小數(shù)長(zhǎng)度52位(53的話是包括符號(hào)位)指數(shù)域是11個(gè)單位元。固定偏移值是2 的 (10)次方減 1, 就是 2的十次方減1,等于 1023
(取值范圍見(jiàn)圖)
長(zhǎng)精度浮點(diǎn)型 long double :
不同的編譯器對(duì)于long double 所給的數(shù)據(jù)都不一樣,一般來(lái)說(shuō)都是分配16個(gè)字節(jié),有效數(shù)字達(dá)到19個(gè)。(其他詳情未知)
取值范圍表:
IEEE 754 國(guó)際標(biāo)準(zhǔn):
審核編輯:湯梓紅
評(píng)論