本節內容主要介紹了C語言程式的基本數據類型。介紹了基本類型的整數類型和浮點類型,以及簡單的講解了void類型。整數類型又包括int型、char型、bool型,浮點類型又包括單精度浮點數(float)和雙精度浮點數(double)。 ...
1.數據類型
在C語言中,數據類型指的是用於聲明不同類型的變數或函數的一個廣泛的系統。C語言數據類型可以分為四種:
-
1.基本類型:
它們是算術類型,包括兩種類型:整數類型和浮點類型。 -
2.枚舉類型:
它們也是算術類型,被用來定義在程式中只能賦予其一定的離散整數值的變數。 -
3.void 類型:
類型說明符 void 表明沒有可用的值。 -
4.派生類型:
它們包括:指針類型、數組類型、結構類型、共用體類型和函數類型。
本節內容主要學習的是基本類型,以及簡單的介紹一下void類型。其他的類型在後續的章節中,將會慢慢的接觸到,不用太擔心。
2.整數類型
2.1 int型
int類型,就是沒有小數的部分,比如2、500、0、-100。
用法如下:
int timoHp = 586;//timo的血量是586;
2.2 char型
char類型用於存放一個字元,值用兩個單引號''來表示 (雙引號表示字元串)。編程語言通過使用字母的數值編碼來解決字母的存儲,因此char類型是另一種整型。字元集的字元用數值編碼(ASCII碼)表示。例如,字元'A'的編碼是65,字元'B'的編碼是66。
用法如下:
//char 只能存放一個字元,超過一個字元就會產生編譯錯誤
char c = 'a';
char c1 = '蓋';
char c2 = '倫';
2.3 bool型
在計算中,bool變數的值可以是true或false。我們經常將非零值解釋為true,將零解釋為false。舉一個簡單的例子,我們可以這樣編寫語句:
bool timoLive = true;
字面值true和false都可以通過提升類型轉換為int類型,true被轉換為1,而false被轉換為0:
int timoLive = true;//stick的值是1
int timoKill = false;//egg的值是0
另外,任何非零值都可以轉換為true,而非零被轉換為false:
bool timoHp = 586;//timoHp的值是true
bool timoSpeed = -10;//timoSpeed的值是true
bool timoAttack = 0;//timoAttack的值是false
3.浮點類型
浮點數能夠表示帶小數部分的數字,它們的表示範圍也更大。浮點數在電腦中的存儲分兩部分,一部分表示值,另一部分用於對值進行放大或縮小。舉個簡單的例子來幫助大家理解電腦中的浮點數,比如說過情人節了,我們給女朋友發個紅包表示一下心意。我們需要表示的數額分別是13.14和1314,它們除了小數點的位置不同外,其他都是相同的(幫你們找了一個極好的藉口)。至少電腦是這樣看的,至於女朋友怎麼看~~~在電腦中,第一個數可以表示為0.1314(基準數)和100(縮放因數),第二個數可以表示為0.1314(基準數)和10000(縮放因數)。縮放因數的作用就是移動小數點的位置,這其實也是浮點數術語的來源。電腦中的實際表示其實不是這樣的十進位,而是基於二進位,這裡我們簡單的明白這個原理就行了。
3.1 書寫浮點數
浮點數的書寫方法有兩種,一種是我們使用的標準小數點表示法:
3.14
5.0
0.52
第二種是E表示法:
3.14E+2
1.26e-4
5E6
-20.18E10
3.14E+2
上面的數字就是E表示法,比如說3.14E+3,這裡的意思是3.14的小數點向右移動3位。其中前面的符號位可以是正號(+)或者負號(-),小數點也是可選的,可以使用E或者e,後面的符號可以是+、-或者省略,後面的數字代表移動的位數。
3.2 單精度浮點數(float)和雙精度浮點數(double)
浮點數根據範圍和精度不同分為兩種:單精度浮點數(float)和雙精度浮點數(double)。一般來說,處理單精度浮點數的速度比處理雙精度浮點數快。
-
單精度浮點數一般占4個位元組,32位。單精度浮點數1位符號位,8位指數,23位小數。float的小數位只有23位,能表示的最大十進位數為2的23次方,即8 388 608,相當於十進位的7位,嚴格點說,精度只能百分百的保證十進位的6位。所以我們一般說有效數字是8位。單精度浮點的表示範圍:-3.40E+38 ~ +3.40E+38。
-
雙精度浮點數一般占8個位元組,64位。雙精度浮點數1位符號位,11位指數,52位小數。小數位能表示的最大十進位數為2的52次方,即4 503 599 627 370 496。這是一個16位數,所以精度能百分百的保證十進位的15位。所以有效數字為16位。雙精度浮點的表示範圍:-1.79E+308 ~ +1.79E+308。
簡單的用法如下:
float timoArmor = 150.7; //timo的護甲是150.7,查看VS中armor實際的值可以看到是150.699997
double timoAttackSpeed = 0.865;/*timo的攻擊速度是0.865,查看VS中attackSpeed實際的值可以看到是0.86499999999999999*/
與整數相比,浮點數有兩大優點。第一個是浮點數可以表示整數之間的值,可以表示小數。第二個是浮點數的表示範圍比整數大的多。浮點數也有兩個缺點,一個是浮點數運算的速度通常比整數慢,而且精度將降低。下麵通過一個簡單的程式來說明:
float a = 3.14E+22;
float b = a + 1.0;
該程式定義一個float類型a,然後b是a+1,試問運行程式b-a是多少?我們認為結果應該為1,但是在我們程式運行結果中,b-a將會是0。產生這個問題的原因就是3.14E+22是一個小數點左邊有23位的數字,加上1,就是在第23位加1,但是float類型只能表示8位數字有效,因此對這個值不會有任何影響。
4.void類型
void的意思是“無類型”,表示函數沒有返回值以及對函數參數做限定。這裡如果不理解的話,可以先看看就好了,以後講到函數就懂了。如果不用void,比如用int或者別的,則函數需要有返回值。void就是不需要結果,否則如int、char等,就必需返回一個與其對應的數據才能編譯通過。void不能用來定義變數,讓我們試著來定義:
void a;
這個語句編譯時會出錯。不過,即使編譯不會出錯,它也沒有任何實際意義。
5.總結
總結一下,本節內容主要介紹了C語言程式的基本數據類型。介紹了基本類型的整數類型和浮點類型,以及簡單的講解了void類型。整數類型又包括int型、char型、bool型,浮點類型又包括單精度浮點數(float)和雙精度浮點數(double)。
6.練習
3-1 下麵的程式,第一處i的值是什麼?第二處i的值是什麼?
char ch = 'A';
int i = ch;//第一處i
ch = ch + 1;
i = ch;//第二處i
3-2 編寫一個程式,對蓋倫的屬性值,找到合適的類型來定義。
名字:簡稱為G
生命值:455
移動速度:340
攻擊速度:0.625
攻擊範圍:125
生命回覆:8.25
攻擊力:59.5
可以在評論中,寫下你們的練習答案。
之後的文章會給大家帶來更精彩的內容
歡迎關註我的知乎專欄:程式員基礎知識
獲取練習答案以及更多實戰項目
歡迎關註我的公眾號:程式員基礎知識
交(gao)流(ji)群:493584686