本節書摘來自華章計算機《編寫高品質代碼:改善c程式代碼的125個建議》一書中的第1章,建議2,作者:馬 偉 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
到c99為止,c語言為我們提供了12個相關的資料類型關鍵字來表達各種資料類型。如表1-2所示,k&r c提供了7個,c89/c90新增了2個,c99新增了3個。

https://yqfile.alicdn.com/2c575593fb8fbf685cadc4bce887b4fa480c6a62.png" >
整型是c語言最基本的資料類型,它以二進制編碼的方式進行存儲,具體可以包括字元、短整型、整型和長整型等。例如,整數2的二進制表示為10,它在8位與32位的作業系統中存儲方式如圖1-3所示。

https://yqfile.alicdn.com/2fcca96a5d805b2b0d815980e34c637ab10ef7f2.png" >
雖然在計算機中整數是以二進制編碼方式進行存儲的,但為了便于表達,有時候又會用十六進制編碼方式表示(例如,在32位作業系統下,整數2的十六進制編碼方式為0x00000002),二進制和十六進制之間能夠很友善地進行轉換。
與此同時,整數類型又可分為有符号(signed)和無符号(unsigned)兩種類型,limits.h檔案定義了整型資料類型的表達值範圍。在gcc 4.8.3中,limits.h檔案定義如下:

https://yqfile.alicdn.com/42f82c32e528e68de88131263ce8751e6662f54a.png" >
簡單地講,有符号和無符号整數間的差別在于怎樣解釋整數的最高位。如果定義一個有符号整數,則c編譯程式生成的代碼認為該數最高位是符号标志:符号标志為0,則該數為正;符号标志為1,則該數為負。
負數采用2的補碼的形式來表示,即對原碼各位求反(符号位除外),再将求反的結果加1,最後将符号位設定為1。例如,在32位作業系統中,有符号整數-2的存儲方法如下。
第一步:取絕對值2的二進制編碼。
第二步:求反(符号位除外)。
第三步:将求反的結果加1。
第四步:将符号位設定為1。
是以,有符号整數-2的二進制編碼為11111111 11111111 11111111 11111110,十六進制編碼為0xfffffffe。
最後還需要說明的是,當類型修飾符被自身使用時(即它不在基本類型之前時),假定其為int型。也就是說,表1-4的兩種類型是等效的。