亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

C語言數(shù)據(jù)類型取值范圍

原創(chuàng) 2016-11-09 16:05:09 897
摘要:一、獲取數(shù)據(jù)類型在系統(tǒng)中的位數(shù)  在不同的系統(tǒng)中,數(shù)據(jù)類型的字節(jié)數(shù)(bytes)不同,位數(shù)(bits)也有所不同,那么對應(yīng)的取值范圍也就有了很大的不同,那我們怎么知道你當(dāng)前的系統(tǒng)中C語言的某個(gè)數(shù)據(jù)類型的字節(jié)數(shù),位數(shù)呢?  由于本人是初學(xué),所以下面的代碼是硬編程了,獲取一個(gè)數(shù)據(jù)類型的字節(jié)數(shù)和位數(shù):/* 獲取數(shù)據(jù)類型在當(dāng)前系統(tǒng)中的字節(jié)數(shù)(bytes)和位數(shù)(bits) */#inc

一、獲取數(shù)據(jù)類型在系統(tǒng)中的位數(shù)

  在不同的系統(tǒng)中,數(shù)據(jù)類型的字節(jié)數(shù)(bytes)不同,位數(shù)(bits)也有所不同,那么對應(yīng)的取值范圍也就有了很大的不同,那我們怎么知道你當(dāng)前的系統(tǒng)中C語言的某個(gè)數(shù)據(jù)類型的字節(jié)數(shù),位數(shù)呢?

  由于本人是初學(xué),所以下面的代碼是硬編程了,獲取一個(gè)數(shù)據(jù)類型的字節(jié)數(shù)和位數(shù):

/* 獲取數(shù)據(jù)類型在當(dāng)前系統(tǒng)中的字節(jié)數(shù)(bytes)和位數(shù)(bits) */#include <stdio.h>int main(void)
{        //1個(gè)字節(jié) = 8位
        printf("整數(shù)類型:int;bytes = %d;bits = %d\n",sizeof(int),sizeof(int) * 8);        return 0;
}

  上面的代碼中使用的函數(shù)sizeof來獲取數(shù)據(jù)類型對應(yīng)的字節(jié)數(shù),對應(yīng)的位數(shù)也就出來了,那么很多時(shí)候在編程的時(shí)候,要是我們不知道數(shù)據(jù)類型在本系統(tǒng)中的位數(shù)和取值范圍的話,很容易出現(xiàn)問題:數(shù)據(jù)類型的值向上溢出,或者向下溢出了,而我們還不知到怎么回事,這個(gè)時(shí)候找問題就很費(fèi)勁了

二、獲取數(shù)據(jù)類型對應(yīng)的取值范圍

  首先來舉個(gè)例子:

    數(shù)據(jù)類型:char(字符串,實(shí)際以整數(shù)存儲) 

    字節(jié)數(shù):不管在哪個(gè)操作系統(tǒng)中都是1個(gè)字節(jié)

    位數(shù):1個(gè)字節(jié) = 8位(以二進(jìn)制存儲)

    無符號取值范圍:00000000 ~ 11111111 (有8位二進(jìn)制數(shù)存儲),那么結(jié)果char的取值范圍是0~255

    有符號取值范圍:-2^7 ~ (2^7)-1 也就是-128 ~ 127

  那可能你會問了,為什么計(jì)算有符號的取值范圍時(shí),最后需要減1呢?請看下面的分析:

    有符號取值范圍分正數(shù):127 =(轉(zhuǎn)換成二進(jìn)制)=>1111111(這里二進(jìn)制只有7位,換句話說,實(shí)際二進(jìn)制值是01111111)

    有符號取值范圍分負(fù)數(shù):-128 =(轉(zhuǎn)換成二進(jìn)制)=>10000000(剛好是8位)

  不知道大家有沒有發(fā)現(xiàn)他們的區(qū)別?

  區(qū)別:

    正數(shù):二進(jìn)制的最高位是0,最高位是0表示正數(shù)

    負(fù)數(shù):二進(jìn)制的最高位是1,最高位是1表示負(fù)數(shù)

  也就是說二進(jìn)制也有正數(shù)和負(fù)數(shù)的區(qū)別(講個(gè)插曲,之前我學(xué)進(jìn)制轉(zhuǎn)換的時(shí)候做練習(xí)題,看到有負(fù)數(shù),我當(dāng)時(shí)就干蒙了,現(xiàn)在才明白是這么區(qū)分的)

  同樣的,其他的數(shù)據(jù)類型都是這么計(jì)算的,下面總結(jié)一下計(jì)算公式,方便快速計(jì)算數(shù)據(jù)類型的取值范圍:

    下面的bits = 數(shù)據(jù)類型的字節(jié)數(shù) * 8;

    signed typeName(有符號的數(shù)據(jù)類型取值范圍):-2^(bits-1) ~ (2^(bits-1))-1

    unsigned typeName(無符號的數(shù)據(jù)類型取值范圍):(2^bits)-1


發(fā)佈手記

熱門詞條