溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中有哪些類型

發布時間:2021-07-02 16:20:12 來源:億速云 閱讀:239 作者:Leah 欄目:大數據

這期內容當中小編將會給大家帶來有關C語言中有哪些類型,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

C語言的數據類型

類型的位寬

相比于高級語言,C語言的整型數據類型都有固定位寬,即類型占多少位。比如下面的數據類型:

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

每個類型都指定了符號和位寬,從字面上就可以看到這個類型的位寬是多少。由于位寬的存在,導致每個類型都有自己的最大值和最小值,比如Linux又分別定義了每種類型的最大值和最小值(無符號數的最小值都是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語言的運算基本都要都要這些邊界值,否則就會造成傳說中的整數溢出問題。如加法和乘法運算就要做如下判斷:

//計算兩個值的和
uint32_t sum(uint32_t a, uint32_t b)
{
    /*先判斷加法以后是否會溢出
    注意這里不能用 (a+b)<UINT32_MAX判斷,因為a+b已經溢出了,判斷已經沒有意義了*/
    if ((UINT32_MAX - a) < b)
    {
        //error 
    }
    
    return a + b;
}

//計算兩個值的乘積
uint32_t mul(uint32_t a, uint32_t b)
{
    /*先判斷乘積以后是否會溢出
    注意這里不能用 (a*b)<UINT32_MAX判斷,因為a*b已經溢出了,判斷已經沒有意義了*/
    if ((UINT32_MAX / a) < b)
    {
        //error
    }
    
    return a * b
}
類型的符號

C語言的整型數據類型都包含符號修飾符:signed (有符號)或者unsigned(無符號),但是符號修飾符并不影響數據真實的值,比如我們定義如下值:

signed char a = -1
unsigned char b = (signed char)a;

從內存的內容來講,a的內存和b的內存是一致的,都是11111111,沒什么區別,但是符號修飾符會影響邏輯判斷的結果,比如雖然這兩個值在內存上沒什么區別,但是如果下比較會返回相反的結果:

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語言的默認轉換也會影響邏輯判斷的結果,如下面的比較在不同的情況下,結果就不同

signed char a = -1
unsigned char b = (signed char)a;

//不成立,a沒有轉換為`unsigned char`
if (a > (unsigned char)0)
{
    printf("unsigned char a > 0\n");
}

//不成立,a沒有轉換為`unsigned short`
if (a > (unsigned short)0)
{
    printf("unsigned char a > 0\n");
}

//成立,a轉換為`unsigned int`
if (a > (unsigned int)0)
{
    printf("unsigned int a > 0\n");
}

上述就是小編為大家分享的C語言中有哪些類型了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女