您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)C語言中有哪些類型,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
相比于高級語言,C語言的整型數(shù)據(jù)類型都有固定位寬,即類型占多少位。比如下面的數(shù)據(jù)類型:
signed char unsigned char signed short unsigned short signed int unsigned int signed long unsigned long signed long long unsigned long long
由于平臺的不同,這些類型的位寬可能有些不相同,但是可以確定的是,每個平臺都有固定的位寬。為了在編程過程中明確指定位寬,增加代碼的可讀性和避免對平臺依賴,各個平臺都定義了自己指定位寬的基本類型,如Linux平臺上在stdint.h
頭文件就定義了如下類型
int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t
每個類型都指定了符號和位寬,從字面上就可以看到這個類型的位寬是多少。由于位寬的存在,導(dǎo)致每個類型都有自己的最大值和最小值,比如Linux又分別定義了每種類型的最大值和最小值(無符號數(shù)的最小值都是0)
INT8_MIN INT8_MAX INT16_MIN INT16_MAX INT32_MIN INT32_MAX INT64_MIN INT64_MAX UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
有了這些定義,C語言的運算基本都要都要這些邊界值,否則就會造成傳說中的整數(shù)溢出問題。如加法和乘法運算就要做如下判斷:
//計算兩個值的和 uint32_t sum(uint32_t a, uint32_t b) { /*先判斷加法以后是否會溢出 注意這里不能用 (a+b)<UINT32_MAX判斷,因為a+b已經(jīng)溢出了,判斷已經(jīng)沒有意義了*/ if ((UINT32_MAX - a) < b) { //error } return a + b; } //計算兩個值的乘積 uint32_t mul(uint32_t a, uint32_t b) { /*先判斷乘積以后是否會溢出 注意這里不能用 (a*b)<UINT32_MAX判斷,因為a*b已經(jīng)溢出了,判斷已經(jīng)沒有意義了*/ if ((UINT32_MAX / a) < b) { //error } return a * b }
C語言的整型數(shù)據(jù)類型都包含符號修飾符:signed
(有符號)或者unsigned
(無符號),但是符號修飾符并不影響數(shù)據(jù)真實的值,比如我們定義如下值:
signed char a = -1 unsigned char b = (signed char)a;
從內(nèi)存的內(nèi)容來講,a的內(nèi)存和b的內(nèi)存是一致的,都是11111111
,沒什么區(qū)別,但是符號修飾符會影響邏輯判斷的結(jié)果,比如雖然這兩個值在內(nèi)存上沒什么區(qū)別,但是如果下比較會返回相反的結(jié)果:
signed char a = -1 unsigned char b = (signed char)a; //成立 if (a < 0) { printf("a < 0\n"); } //成立 if (b > 0) { printf("b > 0\n"); }
除了符號會影響邏輯判斷之外,C語言的默認(rèn)轉(zhuǎn)換也會影響邏輯判斷的結(jié)果,如下面的比較在不同的情況下,結(jié)果就不同
signed char a = -1 unsigned char b = (signed char)a; //不成立,a沒有轉(zhuǎn)換為`unsigned char` if (a > (unsigned char)0) { printf("unsigned char a > 0\n"); } //不成立,a沒有轉(zhuǎn)換為`unsigned short` if (a > (unsigned short)0) { printf("unsigned char a > 0\n"); } //成立,a轉(zhuǎn)換為`unsigned int` if (a > (unsigned int)0) { printf("unsigned int a > 0\n"); }
上述就是小編為大家分享的C語言中有哪些類型了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。