在C#語言中,數(shù)據(jù)類型按其本身在內(nèi)存中被存儲的方式,可以將其歸為兩類:值類型和引用類型。其區(qū)別在于,值類型的變量直接存放實際的數(shù)據(jù),而引用類型的變量存放的則是數(shù)據(jù)的地址,即對象的引用。
在這里首先介紹值類型。C#的值類型包括三種:簡單類型、結(jié)構(gòu)類型和枚舉類型。其中,簡單類型又包括:整數(shù)類型、浮點類型、小數(shù)類型、布爾類型和字符類型。下面我將一一作以介紹。
1.整數(shù)類型
按照,數(shù)據(jù)在內(nèi)存中存儲時所占的位長及是否有符號位,我們又可以把整數(shù)類型分成以下八種,其所占的位長和取值范圍已經(jīng)標(biāo)在表格中:
|
類型 |
描述 |
取值范圍 |
字節(jié)數(shù) |
|
byte |
無符號整數(shù) |
0~255 |
1 |
|
sbyte |
有符號整數(shù) |
-128~127 |
1 |
|
short |
有符號短整型 |
-32768~32767 |
2 |
|
ushort |
無符號短整型 |
0~65535 |
2 |
|
int |
有符號整型 |
-2147483648~2147483647 |
4 |
|
uint |
無符號整型 |
0~4294967295 |
4 |
|
long |
有符號長整型 |
-9223372036854775808~ 9223372036854775807 |
8 |
|
ulong |
無符號長整型 |
0~188446744073709551615 |
8 |
系統(tǒng)默認(rèn)整數(shù)類型為int。
在這里給大家解釋一下關(guān)于有符號整型和無符號整型的含義。在計算機中,數(shù)據(jù)是以二進(jìn)制的形式存儲的。如十進(jìn)制的9,在內(nèi)存中存儲的二進(jìn)制數(shù)為(以8位計):0000 1001,但是如何表示一個數(shù)的正負(fù)呢,聰明的人們總是有辦法的,就把二進(jìn)制的最高位騰出來表示正負(fù)號,并且規(guī)定,最高位如果是1,則其所表示的數(shù)就是負(fù)數(shù),如果是0,其所表示的數(shù)就是正數(shù)。問題似乎解決了,但是我們想一想,如果用這種方法的話,0又如何表示呢?假設(shè)在8位的內(nèi)存單元中,存儲的二進(jìn)制數(shù)據(jù)是1000 0000,其轉(zhuǎn)換為十進(jìn)制數(shù)代表什么呢,按照這個規(guī)則,其應(yīng)該是-0;如果存儲的二進(jìn)制數(shù)是0000 0000,其轉(zhuǎn)換成十進(jìn)制數(shù)又是什么呢?我們可以知道應(yīng)該是+0;實際上,我們知道,-0和+0在十進(jìn)制數(shù)中應(yīng)該是相等相同的,可是在內(nèi)存中表示方法不唯一,這樣給計算機處理數(shù)據(jù)帶來很大的麻煩。聰明的人們又想出了另外一個方法,即正數(shù)還是用剛才的方法來表達(dá),而負(fù)數(shù)呢用補數(shù)來表示。
什么是補數(shù)呢?這里僅給出算法,更多的可參考相關(guān)書籍的說明。對于負(fù)數(shù),其補數(shù)等于其反碼+1,反碼即對應(yīng)的二進(jìn)制數(shù),除符號位之外,原來是0的變成1,原來是1的變成0,則-0的反碼就是1111 1111,加1之后的補碼為:1 0000 0000,然而,在8位內(nèi)存單元中,1是溢出去的,只有后面的8個0才是有效的表示數(shù)的位,這樣負(fù)數(shù)0和正數(shù)0都一樣了。好了,現(xiàn)在回到正題。
2.浮點類型(float 和 double)
有兩種,一種是單精度的即:float型的,另外一種是雙精度型的即:double型的,這與其他語言如Java和C++相同。其中:float型的占4個字節(jié),取值范圍為:±1.5×10-28~3.4×1038其精度為7,即可表示7位數(shù)的小數(shù),如123.3434,1.345628,1234.123。如果超過7位,則會進(jìn)行四舍五入,如寫成:234.54567,實際上系統(tǒng)處理成234.5457,如果整數(shù)部分超過7位,則以科學(xué)計數(shù)法進(jìn)行表示,而且超過部分會被四舍五入,如浮點數(shù)12345747,則輸出時為1.234575E+07。
雙精度型的浮點數(shù)在內(nèi)存中占8個字節(jié),其取值范圍為:±5.0×10-324~1.7×10308,精度為15或16,特點如單精度。
系統(tǒng)默認(rèn)小數(shù)的類型為雙精度型的,這意味著float f1=4.4;這樣的語句將無法通過編譯,因為在這里,4.4系統(tǒng)默認(rèn)為雙精度型的,不能將高精度的4.4賦給低精度的f1變量,解決辦法,是在數(shù)字后加上字母f或F,表示該變量為單精度型的,即上面的語句應(yīng)該寫成:
float f1 = 4.4f;或者 float f1 = 4.4F;
3.小數(shù)類型(decimal)
在內(nèi)存中占16個字節(jié),一般用于對于精度有較高要求的場合,如表示原子的半徑等,其數(shù)值范圍為:±1.0×10-28~7.9×1028,可達(dá)29位小數(shù)。由于,系統(tǒng)默認(rèn)小數(shù)為double型的,在給decimal賦值時,在數(shù)字后面要加m或M。如:
decimal dc = 23.567m;或者 decimal dc = 23.567M;
否則將給出編譯錯誤:不能隱式地將 Double 類型轉(zhuǎn)換為“decimal”類型;請使用“M”后綴創(chuàng)建此類型。
4.布爾類型(bool)
布爾類型是以英國著名數(shù)學(xué)家布爾的名字進(jìn)行命名的,其值僅有兩種:true和false。一般用于邏輯判斷和條件表達(dá)式中,以后我們要介紹的選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和邏輯操作符,將會更多地了解這種數(shù)據(jù)類型。
5.字符類型
字符類型與C++中的字符類型略微有點不同,那就是在C++中字符類型占1個字節(jié),以ASCII碼進(jìn)行存儲,而在C#中,占2個字節(jié),是以Unicode碼進(jìn)行存儲的。這是什么意思呢?ASCII碼是美國國家信息標(biāo)準(zhǔn)交換碼,它把26個大小寫字母和10個數(shù)字、標(biāo)點符號,以及其它常用的符號各以一個字節(jié)存儲,至多可以表示存儲256個字符。但是,隨著計算機在其它國家的推廣運用,這種ASCII編碼卻出現(xiàn)了問題:即不夠用了,因為1個字節(jié)8位,至多表示256種情況,而就我們中國而言,文字成千上萬,怎么來表示呢,還有韓文,日文,俄文等,于是人們用2個字節(jié)來表示這些信息。造成各國編碼不一致的情形,后來有人就把他統(tǒng)一起來,不管是哪個國家的編碼統(tǒng)一使用2個字節(jié),這就是Unified Code(統(tǒng)一碼),即Unicode。照這樣講,一些字符和數(shù)字之間是可以進(jìn)行轉(zhuǎn)換的,的確如此,如下:
int iA = 'A'+23;
這里的iA應(yīng)該是多少呢?告訴你,應(yīng)該是88,怎么來的呢,因為字符’A’,在內(nèi)存中以其Unicode碼65進(jìn)行存儲,這樣的話,字符型可以自動向整型int進(jìn)行轉(zhuǎn)換,所以結(jié)果為88。
另外,對于字符類型,是以單引號引起來的,千萬不要用成雙引號。這是兩個不同的概念。如果用成雙引號就成字符串了。
對于結(jié)構(gòu)體和枚舉類型將單獨列出,敬請關(guān)注。
新聞熱點
疑難解答