国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

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

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

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

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

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

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

  首先來舉個例子:

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

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

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

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

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

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

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

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

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

  區(qū)別:

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

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

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

  同樣的,其他的數(shù)據(jù)類型都是這么計算的,下面總結(jié)一下計算公式,方便快速計算數(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


Release Notes

Popular Entries