C語言數據類型

一、基本類型

基本類型的值不可以再分爲其他類型。

整型

1.整型數據

在程序中根據各種前綴來區分各種進制數,若數超過了範圍,則用長整型來表示,即後綴用L或l來表示。
(1)二進制
17到18世紀的德國數學家萊布尼茨首次提出了二進制計數法。二進制技術只需要0和1兩個符號,不需要其他的符號。
(2)八進制
Octal,縮寫OCT或O,一種以8爲基數的計數法,採用0,1,2,3,4,5,6,7八個數字,逢八進1。一些編程語言中常常以數字0開始表明該數字是八進制。八進制的數和二進制數可以按位對應(八進制一位對應二進制三位),因此常應用在計算機語言中。
(3)十進制
十進制數沒有前綴。
(4)十六進制
十六進制(簡寫爲hex或下標16)在數學中是一種逢16進1的進位制。一般用數字0到9和字母A到F(或af)表示,其中:AF表示10~15,這些稱作十六進制數字。十六進制以0x或0X表示。
十進制轉二進制
十進制數除2取餘法,即十進制數除2,餘數爲權位上的數,得到的商值繼續除2,依次步驟直至商爲0。
在這裏插入圖片描述
二進制與八進制
3位二進制數按權展開相加得到1位八進制數,三位二進制轉成八進制是從右至左開始轉換,不足時補0。
將每個八進制數改爲二進制數,不足時在最左邊補0。
在這裏插入圖片描述
二進制與十六進制
4位二進制數按權展開相加得到1位十六進制數,從右至左開始轉換,不足時補0。
將每個十六進制數轉爲4個二進制數字,不足時在最左邊補0。
在這裏插入圖片描述

2.整型變量

整型變量分爲基本型,短整型,長整型,無符號型四種。
在計算機中數值以補碼的形式存儲。補碼:(1)正數的補碼原碼相同;(2)負數的補碼:將該數絕對
值的二進制形式按位取反再加1。
在這裏插入圖片描述
基本型:類型說明符爲int,在內存中佔4個字節;
短整型:類型說明符爲short int 或short,所佔字節和取值範圍與基本型相同;
長整型:類型說明符爲long int或long,在內存中佔4個字節;
無符號型:類型說明符爲unsigned。
定義:類型說明符 變量標識符,變量名標識符。在內存中存儲的形式:
在這裏插入圖片描述

字符型

字符型分爲字符常量、字符串常量、字符變量、轉義字符四種。
每個字符變量被分配一個字節的內存空間,字符值以ASCII碼的形式存放在變量的內存單元中[65-90:A-Z;97-122:a-z;48-57:0-9]。

1.字符常量

字符常量即單引號括起來的一個字符。字符常量定義時需注意:
(1)字符常量只能用單引號括起來;
(2)字符常量只能是單個字符,不能是字符串;
(3)字符可以是任意字符,但是數字被定義爲字符型之後就不能參與數值運算。

2.字符串常量

字符串常量即由雙括號引起來的字符序列。
字符串常量可以含一個或多個字符;可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量(可以char c=‘c’,不能char c=「c」);字符常量佔一個字節的內存空間。字符串常量佔的內存等於字符串中字節數加1,增加的一個字節中存放字符「\0」,ASCII碼爲0,這是字符串結束的標誌。

3.字符變量

字符變量用來存儲字符常量,即單個字符,類型說明符爲char。

4.轉義字符

轉義字符以反斜線\開頭,後跟一個或幾個字符。
在這裏插入圖片描述

實型

實型即浮點型,有單精度型(float)、雙精度型(double)、長雙精度(long double)三種。
實型一般佔4個字節,按指數形式存儲[小數部分佔的位數越多,數的有效數字越多,精度越高;指數部分佔的位數越多,則能表示的數值範圍越大]。
在這裏插入圖片描述
在c語言中,實數只採用十進制(十進制小數形式,指數形式:由十進制數,加階碼e或E以及階碼組成aEn)實型數據有舍入誤差。
在這裏插入圖片描述

數據類型轉換

數據類型轉換分爲兩種:(1)自動轉換;(2)強制轉換

1.自動轉換

轉換規則:
(1)若參與運算量的類型不同,則先轉換爲同一類型,然後進行運算; (2)轉換按照數據長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int轉成long在運行 ;
(3)所有浮點運算都是以雙精度進行的,即使含有float單精度量運算的表達式,也是先轉換成double型,在做運算;
(4)char型和short型運算時,必須先轉換成int型; (5)在賦值運算中,賦值號兩變量的數據類型不同時,賦值號號右邊量的類型轉換爲左邊量的類型。若右邊量的數據類型長度比左邊長時,將丟失一部分數據,這樣會降低精度,丟失的部分按照四捨五入向前舍入。
下圖表示了類型自動轉換的規則。
在這裏插入圖片描述

2.強制類型轉換

強制類型轉換是通過類型轉換運算來實現的。
一般形式爲:
(類型說明符)(表達式)
其功能是把表達式的運算結果強制轉換爲類型說明符所表示的類型。
例如:
(int)(x+y) 把x+y的結果轉換爲整型
使用強制轉換時需注意的問題:
(1)類型說明符和表達式都必須加括號(單個變量可以不加括號),如(int)x+y是把x轉換爲整型後再與y相加;
(2)無論是強制轉換還是自動轉換,都只是爲了本次運算的需要而對變量的數據長度進行的臨時轉換,而不改變數據說明時對該變量定義的類型。

二、指針類型

一種特殊的、重要的數據類型。其值用來表示某個變量在內存儲器中的地址。

三、構造類型

構造類型是根據已定義的一個或多個數據類型用構造的方法來定義。一個構造類型的值可以分爲若干個成員或元素。每個成員都是一個基本數據類型或一個構造類型,主要分爲數組類型、結構體類型、共用體類型三種。

枚舉類型

枚舉類型是指將變量的值一一列出來,變量的值只限於列舉出來的值的範圍內。
在C語言等計算機編程語言中,它是一種構造數據類型。枚舉類型用於聲明一組命名的常數,當一個變量有幾種可能的取值時,可以將它定義爲枚舉類型。在C++、java、C#等語言中,枚舉類型是一種基本數據類型而不是構造數據類型。
使用格式:枚舉類型放在窗體模塊、標準模塊或共用模塊中的聲明部分,通過enum語句來定義。
格式:[public|private] enum name
membername[=constantexpression]
membername[=constantexpression]
……
End enum
public:表示該枚舉類型在整個工程中都是可見的(缺省的)。
private:表示枚舉類型只在所聲明的模塊中是可見的。Name: 枚舉類型的名稱。必須是一個合法的VB標識符,在定義該枚舉類型的變量或參數時用該名稱來指定類型。
Membername:指定該枚舉類型的組成元素名稱。
Constantexpression:枚舉類型的組成元素的值。如果沒有指定具體值,則所有賦的值或者是0或者比其直接前驅的值大1。元素的值也可以是別的enum類型。VB中將枚舉中的元素的值按長整數處理。如果將一個浮點數值賦給一個枚舉中的元素,VB會將該值取整爲最接近的長整數。

四、空類型

有一類函數,調用後並不需要向調用者返回函數值,這種函數可以定義爲「空類型」,類型說明符爲void。