變量的類型
第二章 第3節 預定義數據類型
我們已經知道了變量可以代表一個具體的數值,那麼這個代表的過程是怎樣實現的呢?
每臺計算機上都有內存,比如4G、16G,甚至更多。我們寫的代碼,被翻譯成用機器語言表示的代碼,在執行的時候,這些機器代碼先是被放到內存裏,然後再執行。
在程序執行的時候,我們代碼裏寫的變量,同時也被放到了內存裏,佔據一定的內存空間,每個具體的數值,就是存放在這個空間裏的。
比如我們代碼中的“int i;”,i是一個整數型變量,在C#中,int型變量的長度是32位的,這個變量在內存中佔用32位的空間,程序運行的時候,先是數值1通過“i=1;”被放在了這個空間裏,它的值使用“Console.WriteLine(i);”顯示到屏幕上之後,數值1314通過“i=1314;”被放到了這個空間裏,當1314放在這裏之後,數值1就被覆蓋掉了,自然也就不存在了,這個變量所佔用的內存裏只剩下了1314。
我們可能會對長度是32感到一些奇怪,它的長度爲什麼不是30、20,而非要是32呢?
原來計算機是按字長處理數據的,最早的計算機字長是8位,即一次能處理長度爲8個bit位的數據,一個bit位只能表示0或1。後來發展到16位、32位、64位。所以,在C#中,規定整數int類型的長度爲32位,而不是30或20位,是爲了適應計算機處理數據的方式。Windows操作系統分爲32位和64位,也是這個樣子的。
在我們以後的編程過程中,會遇到各式各樣類型的數據,不只是int類型的數值。所以C#還規定了很多其它的類型。我們逐個進行學習吧:
1. 整數型
1). sbyte
sbyte是8位有符號的整數,它能保存的數值範圍是-128 ~ 127,共有256個數。超出這個範圍,就要考慮使用別的數據類型了。sbyte是signed byte的縮寫,中文的意思是有符號字節。其實,一個字節就包含8個bit位,即長度爲8。
2). short
short是16位有符號的整數,它能保存的數值範圍是-3,2768 ~ 3,2767,共有6,5536個數。
3). int
int是32位有符號的整數,它能保存的數值範圍是-21,4748,3648 ~ 21,4748,3647,共有42,9496,7296個數。
4). long
long是64位有符號的整數,它能保存的數值範圍是-922,3372,0368,5477,5808 ~ 922,3372,0368,5477,5807,共有1844,6744,0737,0955,1616個數。
5). byte
byte是8位無符號的整數,它能保存的數值範圍是0 ~ 255,共256個數。
6). ushort
ushort是16位無符號的整數,它能保存的數值範圍是0 ~ 6,5535,共6,5536個數。
7). uint
uint是32位無符號的整數,它能保存的數值範圍是0 ~ 42,9496,7295,共42,9496,7296個數。
8). ulong
ulong是64位無符號的整數,它能保存的數值範圍是0 ~ 1844,6744,0737,0955,1615,共1844,6744,0737,0955,1616個數。
2. 浮點類型
浮點類型通常用來表示帶有小數部分的數值,因爲小數點在數值裏可以前後移動,所以也叫浮點。
1). float
float是32位單精度浮點數,它能大致能表示7位十進制數,可以用於較小的浮點數。
2). double
double是64位雙精度浮點數,它能大大致表示15位十進行制數,可以用來表示較大的浮點數。
一般情況下,代碼中出現的小數,編譯器一般假定是double類型的,如果想指定這個數值是float類型的,就要在數值的後面加上一個字母F,或f。如:
float f = 12.3F;
或
float flt = 520.1314f;
3. decimal類型
有些情況下,我們還需要處理更高精度的數值,它甚至超過了15位十進制數,在這種情況下,可以使用decimal類型,它佔用128位存儲空間,能提供28位十進制數的處理能力,如:
decimal d = 12.30M;
4. bool類型
布爾型,它僅能表示true或false。C#中,不像C或C++那樣,bool值不能和數值相互隱式轉換,如果試圖把0或1賦值給一個布爾變量,編譯器就會報錯。
5. 字符類型
char類型可以保存單個字符,它表示一個16位的(Unicode)字符。字符的值使用單引號括起來,如:
char c = 'A';
表示把字符A賦值給變量c,即把字符A放到c變量佔用的存儲空間裏。
我們以前接觸過類似"Hello, world!"的類型,因爲它是用雙引號括起來的,是字符串,跟使用單引號括起來的字符類型是有區別的。其實,字符串中的每個元素,是一個個的字符,字符串就是字符串起的串。