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