本文發(fā)布于微信公眾號(hào):三玹
上一篇文章中介紹了變量,在C語(yǔ)言中創(chuàng)建一個(gè)變量,就需要對(duì)此變量的數(shù)據(jù)類型進(jìn)行聲明。本篇文章就來(lái)重點(diǎn)講一下數(shù)據(jù)類型。在講數(shù)據(jù)類型之前,先引入一個(gè)知識(shí)點(diǎn),計(jì)算機(jī)的存儲(chǔ)單位。
前面有說(shuō)過(guò),計(jì)算機(jī)只能識(shí)別二進(jìn)制的字節(jié)碼語(yǔ)言,如11001001。因此存儲(chǔ)在計(jì)算機(jī)當(dāng)中的所有信息,無(wú)論是視頻、圖片、還是文字,最終都要轉(zhuǎn)化為二進(jìn)制字節(jié)碼。每一位數(shù)字所占的大小為1bit(位,直譯比特,沒(méi)錯(cuò)比特幣的比特)。bit是計(jì)算機(jī)中最小的存儲(chǔ)單位。8個(gè)bit組成了一組Byte(字節(jié),簡(jiǎn)稱B)。Byte是計(jì)算機(jī)中最基本的存儲(chǔ)單位。1024個(gè)Byte即1KB(千字節(jié)),1024個(gè)KB即1MB(百萬(wàn)字節(jié),俗稱兆)。目前已知的計(jì)算機(jī)存儲(chǔ)單位還有:GB、TB、PB、EB、ZB、YB、BB、DB(目前最大的存儲(chǔ)單位)。
了解計(jì)算機(jī)存儲(chǔ)單位之后,來(lái)說(shuō)一下C語(yǔ)言的數(shù)據(jù)類型。
C語(yǔ)言提供了6種最基本的數(shù)據(jù)類型,分別是:short、int、long、float、double、char。這六種數(shù)據(jù)類型又根據(jù)其存儲(chǔ)的特性劃分了三種類型。第一種,整型。用來(lái)存儲(chǔ)整數(shù)的類型,如1、32、49等。整型包括了以下 3 種數(shù)據(jù)類型:短整型,short,所占存儲(chǔ)空間大小為2個(gè)字節(jié),存儲(chǔ)的數(shù)字范圍在-215 ~ 215-1。整型,int,所占存儲(chǔ)空間大小為4個(gè)字節(jié),存儲(chǔ)的數(shù)字范圍在-231~ 231-1。長(zhǎng)整型,long,所占存儲(chǔ)空間大小為4個(gè)字節(jié),存儲(chǔ)的數(shù)字范圍在-231 ~ 231-1。第二種,浮點(diǎn)型。用來(lái)存儲(chǔ)小數(shù)的類型,如3.14、32.00、49.2等。浮點(diǎn)型包括了以下 2 種數(shù)據(jù)類型:單精度類型,float,所占存儲(chǔ)空間大小為4個(gè)字節(jié),存儲(chǔ)的數(shù)字范圍在-3.4x10-38 ~ 3.4x1038。雙精度類型,double,所占存儲(chǔ)空間大小為8個(gè)字節(jié),存儲(chǔ)的數(shù)字范圍在-1.7x10-380 ~ 1.7x10380。單精度和雙精度的差別:前者所占的范圍要比后者小,但換來(lái)的是前者的處理速度要快一些。第三種,字符型。char,用來(lái)表示字符的類型,如A、e、\n等等。char,所占存儲(chǔ)空間大小為1個(gè)字節(jié),存儲(chǔ)的數(shù)字范圍在-128 ~ 127。
雖然 char 被單獨(dú)抓出來(lái)獨(dú)立為一個(gè)類型,但本質(zhì)上還是屬于整數(shù)類型。這是因?yàn)橛?jì)算機(jī)只能識(shí)別二進(jìn)制碼,因此 char 實(shí)際存儲(chǔ)的值是數(shù)字,而不是字符。在ASCII碼表中,一共有 128 個(gè)數(shù)字,對(duì)應(yīng)了 128 個(gè)字符。(因?yàn)橛?jì)算機(jī)是從0開始,所以最大范圍是127)。
圖片來(lái)源:OSCHINA-開源中國(guó)
同時(shí),定義一個(gè) char 變量只能有一個(gè)字符,而該字符是使用單引號(hào) '' 包裹起來(lái)的。int main(){
char c = 'a';
}
雙引號(hào) "" 包裹的叫做字符串,即一串的字符,如 Hello World。在C語(yǔ)言當(dāng)中沒(méi)有專門定義字符串的內(nèi)容,需要使用間接的方式來(lái)實(shí)現(xiàn)字符串,例如創(chuàng)建字符數(shù)組來(lái)實(shí)現(xiàn)。int main(){
char str[] = "Hello World";
}
我們都知道數(shù)字有正的,就有負(fù)的。以上說(shuō)的這些,都是默認(rèn)有符號(hào)的,即有正有負(fù)。也有無(wú)符號(hào)的,專門來(lái)表示大小的。定義方式是在定義類型前面加上一個(gè) unsigned,即表示無(wú)符號(hào)的,只有正數(shù)。int main(){
unsigned int a = 32;
}
無(wú)符號(hào)的數(shù)據(jù)類型的取值范圍,則變?yōu)?0 ~ 2n- 1(n即所占字節(jié)數(shù)x8)。看到最后,有人就要問(wèn)了,同樣都是用來(lái)表達(dá)整數(shù)和小數(shù),為什么需要?jiǎng)澐诌@么多類型呢?只用一個(gè)不就好了?這就不得不提起那個(gè)風(fēng)雨漂泊、電閃雷鳴的年代……在用C語(yǔ)言開發(fā)熱潮的那個(gè)年代,內(nèi)存資源不像現(xiàn)在這么充裕,它是一個(gè)非常稀罕的東西。稍一不注意,內(nèi)存就不夠用了。因此如何用最大化、最合理、最優(yōu)解的方式讓最小內(nèi)存發(fā)出最大的作用,就成為了當(dāng)時(shí)的程序員首要考慮的問(wèn)題。為了最大化節(jié)省內(nèi)存資源,就出現(xiàn)了不同的數(shù)據(jù)類型。本篇文章到此就結(jié)束了,主要介紹了C語(yǔ)言中的基本數(shù)據(jù)類型。下一篇文章,將繼續(xù)延伸不同數(shù)據(jù)類型轉(zhuǎn)換的內(nèi)容。