導讀:C語言程式中經常涉及一些數學計算,所以要熟悉其基本的資料型別。資料型別學習起來比較枯燥,不過結合之前的記憶體概念,以及本節的位元組概念,相信資料型別也就不難理解了。本章從二進位制的基本概念開始,然後介紹機器語言通用的計算單位位元組,最後再介紹C語言中基本的資料型別及其基本概念。
4.1 二進位制、位元組
計算機,電子資訊專業類的大學課程,肯定會有講解二進位制與十進位制轉換的課程,本節為了篇幅小一點,只提供windows計算器中進位制轉換工具的使用方法,希望讀者諒解。
4.1.1 二進位制
機器之間溝通用的是機器語言,機器語言用二進位制資料相互溝通,什麼是二進位制資料?為什麼是二進位制資料呢?我們日常生活中比較熟悉的是十進位制資料,當數字從1開始不停的加1,加到10的時候再加1就會變成11,那麼個位又變回1了,這就叫做滿10進1。
還有比較熟悉的是十二進位制,就是我們的時鐘了,當時針從1開始不停加到12時,再加1,時針就又變成1了。當然如果有人習慣24小時制,那就理解為二十四進位制也可。
圖4.1 時鐘
同理,分針和秒針就是60進位制了,滿60進1。
那麼,二進位制就應該是滿2進1咯,對的,舉個簡單例子:十進位制的1,2,3在二進位制為01,10,11。可以看到十進位制的3在二進位制的第一位為1,因為它滿2就進1了。
平時用進位制轉換可以搬用公式計算,當然快捷的辦法是用windows自帶的計算器,開啟win10系統的計算器軟體,選擇程式設計師選項。
注意:不同版本的windows的計算器用法稍微不同,請讀者自行了解。
圖4.2 windows計算器
滑鼠點選DEC,選擇十進位制,在DEC中輸入123,可以發現二進位制BIN為01111011,八進位制OCT為173,十六進位制為7B,如圖4.3所示,
圖4.3 計算器進位制轉換
計算器基本用法就是這樣了。
注意:為什麼機器語言是二進位制語言?涉及到數位電路方面的知識,說白了CPU,記憶體這些就是大量的開關組合起來的,開就是1,關就是0,這正是二進位制的一種體現。
4.1.2 位元組
二進位制最小單位是位(bit),英文有個片語叫做a little bit,意思就是一點點,bit就是最小的位元,比如十進位制1的二進位制有一個位,十進位制2的二進位制有兩個位“10”,十進位制3的二進位制也能用兩位表示“11”,十進位制4的二進位制用三個位表示“100”。但是C語言記憶體中最小資料是1個位元組(byte),1個位元組有八個位,也就是十進位制1的二進位制表示為“00000001”,十六進位制表示為“0x01”。來個複雜的,十進位制的141表示為......開啟計算器,可知二進位制為“10001101”,它的十六進位制為“0x8D”。
注意:十六進位制一般會在數值前新增“0x”,用於區分十進位制類似的數,比如十進位制69和十六進位制69就不相等,十六進位制的69等於十進位制的105,所以用“0x69”表示十六進位制。
因為1個位元組有八位,所以1個位元組數值範圍在0~255之間,因為當二進位制八位數都為1時即“11111111”最大,等於255。
所以2個位元組有十六位,數值範圍在0~65535之間,因為當二進位制十六位數都為1時即“1111111111111111”最大,等於65535。
所以4個位元組有三十二位,數值範圍在0~4294967295之間......
所以8個位元組有六十四位,數值範圍在......
4.2 基本資料型別
C語言中基本資料型別有字元型char,布林型bool,整型int,長整型long,浮點型float等等,對應的還有無符號字元型unsigned char,無符號整型unsigned int等等。
資料型別有很多,目前就介紹6種,但是如何運用它們呢?我覺得只需要知道這個資料型別的取值範圍以及佔用多少位元組即可。下表請死記硬背:
資料型別 |
取值範圍 |
佔用位元組數 |
char |
-128 到 127 |
1 |
int |
-2,147,483,648 到 2,147,483,647 |
4 |
float |
1.2E-38 到 3.4E+38 |
4 |
unsigned char |
0 到 255 |
1 |
unsigned int |
0 到 4,294,967,295 |
4 |
bool |
true或者false |
2 |
表4.1 列舉一些基本資料型別
注意:當然C語言資料型別不止這些,因為這系列部落格只是程式設計入門篇,不是搬移各個部落格的彙總篇,所以資料型別只介紹其中一部分,日後需要了解別的部分應該就能更輕鬆的瞭解。
發現問題:表中char型和unsigned char型的佔用位元組數都是1個,但是取值範圍不同。
解釋:unsigned的英文直譯是無符號的,而負數的符號是一個負號“-”,所以無符號就是無負號,就是大於0的數。而有符號,就是能夠有負號,可以取值小於0,這樣就不難理解他們的取值範圍了。
注意:資料型別不加unsigned預設為有符號型別。
比如char,是可以有負號的char,取值範圍可以小於0,由於佔的位元組數是1個,所以範圍是-128~127,資料的變化總量就是|-128|+127=255,正好是一個位元組的取值量。
unsigned char,是無符號的char,取值範圍必須大於0,範圍是0~255,。同理,int和unsigned int也是這樣對比。
float型別是浮點型別,說白了就是帶小數點的,比如float型別的值可以取3.1415,而int型別只能取值為3,後面章節講到運算方面會再次對比float和int。
程式設計的時候會需要做程式判決功能,就會用到bool型別的資料,取值有真true和假false兩種。