書名: 高效微控制器C語言編程作者名: (美)馬克·盧瓦本章字數: 1031字更新時間: 2025-06-05 13:36:28
2.2.3 數字
令人驚訝的是,C語言也有可以存儲數值的類型。或者更準確地說,C語言也有可以存儲比char類型變量通常所能容納的數值更大的數字的類型。(盡管本章的示例使用char來存儲實際字符,但它仍然是一種數值類型,適合存儲與字符編碼無關的小數字。)C將這些數值類型分為兩個子類別:整數和浮點數(即小數)。
整數類型
整數類型存儲簡單的數字。主要類型稱為int,但也有許多變體。不同類型的主要區別在于給定類型的變量中可以存儲的最大數字的大小。表2-2總結了這些類型及其存儲容量。
表2-2:整數類型及其典型大小

表2-2:整數類型及其典型大小(續)

注:字符定義為一個字節,其他大小則取決于系統。
上述大多數類型都是有符號類型[4],這意味著它們可以存儲小于0的值。所有這五種類型都有一個明確的無符號變體(如無符號int或無符號char),其位/字節大小相同,但不能存儲負值。如表2-3所示,它們的范圍從0開始,大約是有符號范圍的兩倍。
表2-3:無符號整數類型及其典型大小

下面是整數類型聲明示例。注意x和y變量的聲明。我們經常可以看到網格或圖形上的坐標是用“x和y”來表示的。C語言允許使用逗號分隔聲明多個相同類型的變量名。這種格式沒有什么特別之處,但如果你有一些相關的簡短變量名,這可能是一個不錯的選擇。

如果要存儲的數值較小,例如,“最多一打”或“前100名”,請記住你可以使用char類型。它的長度只有1字節,編譯器不會在意你是將數值打印為實際字符還是簡單的數字。
浮點類型
如果要存儲小數或金融數字,可以使用float或double類型。這兩種類型都是浮點類型,其中的小數點不是固定的(例如可以浮動),可以存儲999.9或3.14這樣的值。但由于我們所討論的計算機是以離散塊為單位進行思考的,因此浮點類型存儲的是以1和0編碼的近似值,就像int一樣。float類型是一種32位編碼,可以存儲從很小的分數到很大的指數等各種數值。但是,float在-32k~32k之間的小范圍內以及小數點后的6個有效位上最為精確。
double類型的精度是float的“雙倍”[5]。這意味著小數點后大約15位數字將被精確表示。我們會在一些地方看到這種近似值可能導致的問題,但對于收據總數或溫度傳感器讀數等一般用途,這些類型已經足夠了。
與其他類型一樣,要將類型放在名稱之前:

由于普通十進制數也可以存儲整數值,如6(存儲為6.0),因此使用float作為默認數值類型可能很有吸引力。但是,在Arduino這樣的小型CPU上處理小數點編碼的數字可能會很昂貴。即使在大型芯片上,處理小數點也比處理簡單整數昂貴。出于性能和準確性的考慮,除非有明確的理由,否則大多數C程序員都會堅持使用int。