溫馨提示×

溫馨提示×

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

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

C語言中數(shù)據(jù)的存儲舉例分析

發(fā)布時間:2021-11-19 13:07:56 來源:億速云 閱讀:151 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“C語言中數(shù)據(jù)的存儲舉例分析”,在日常操作中,相信很多人在C語言中數(shù)據(jù)的存儲舉例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言中數(shù)據(jù)的存儲舉例分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

    一、類型歸類

    對于基本的c語言數(shù)據(jù)類型的基本歸類

    1、整形家族

    char (內(nèi)存存儲的為ascall碼值,存儲為整數(shù))
      unsigned char//   unsigned為無符號關(guān)鍵字 
         signe char//
    short 
       unsigned short (int)// (int )表示int可以省略不寫
         signed short  (int)
    int
        unsigned int
         signed int
    long
        unsigned  long (int)
         signed long   (int)

    2、浮點型家族

    float
    double

    3、指針類型

    int* ptr;
    char* pa;
    float* pf;
    void* pv;

    4、空類型

    void 表示空類型(無類型)


    通常應(yīng)用于函數(shù)的返回類型,返回參數(shù),指針類型

    二、類型的意義

    1.占據(jù)的內(nèi)存大小

    2.作為數(shù)據(jù)時所操作的大?。礊閿?shù)據(jù)看待類型的視角)

    三、數(shù)據(jù)在類型中存儲(以整形和浮點型為例子)

    1. 關(guān)于 存儲的基本概念

    計算機的(整形)有符號數(shù),有三種表示方法,原碼,反碼,補碼

    三種表示方法 均存在 符號位 和 數(shù)值位 兩部分,符號位的‘0'表正,‘1'表示負,數(shù)值位表示方法有差異(對于無符號數(shù):原,反,補表示相同)

    原碼:直接將數(shù)字按照正負,用二進制方法翻譯表示;

    反碼:將原碼的符號位不變,其他位按位取反;

    補碼:反碼+1;

    對于正數(shù)而言,原,反,補相同:

    int a=20;
    // 00000000 00000000 00000000 00010100 原碼
    // 00000000 00000000 00000000 00010100 反碼
    // 00000000 00000000 00000000 00010100 補碼

    對于負數(shù)而言

    int a=-1;
    // 10000000 00000000 00000000 00001010 原碼
    // 11111111 11111111 11111111 11110101 反碼
    // 11111111 11111111 11111111 11110110 補碼

    對于整形數(shù)據(jù)而言再內(nèi)存存儲的是補碼

    2.存儲模式

    1.大端模式(大端字節(jié)序模式):較高的有效字節(jié)存儲在較低的存儲器地址,較低的有效字節(jié)存儲在較高的存儲器地址。

    2.小端模式(小端字節(jié)序模式):較低的有效字節(jié)存儲在較低的存儲器地址,較高的有效字節(jié)存儲在較高的存儲器地址。

    地址的視圖

    低-------------------------------->--------高

    關(guān)于設(shè)計判斷當(dāng)前機器的字節(jié)序

    int check_sys(void)
    {
        int a=1;
        char* p=(char*)&a;//訪問第一個字節(jié)序看是     01.....0  還是 0...01
        return *p;
    }
    int main()
    {
        int ret=check_sys();
        if(ret==1)
            printf("小端");
        else
            printf("大端");
    }

    在這里強制轉(zhuǎn)化成(char*)利用他只訪問一個字節(jié)的視角進行觀測

    指針類型的意義

    1.指針類型決定了指針類型解引用操作符能訪問幾個字節(jié)

    2.指針+類型決定了指針+1跳過幾個字節(jié)

    四.應(yīng)用

    應(yīng)用前應(yīng)掌握的基本概念 整形提升

    1.

    char a=-1;
    //  -1作為整形數(shù)在內(nèi)存中以補碼形式存儲
    // 10000000 00000000 00000000 0000001-原碼
    // 11111111 11111111 11111111 1111110 - 反碼
    // 11111111 11111111 11111111 1111111 -補碼
    // 當(dāng)被賦予a時 a為char型只能存儲8個字節(jié) 就要發(fā)生 截斷
    // 即 a 存儲為 1111111
    signed char b=-1;
    // sigend為默認關(guān)鍵字 聲明和聲明都默認為有符號
    // 同理 b 1111111
    unsigned char c=-1;
    // c 1111111將高位當(dāng)做數(shù)值位對待
    printf("%d %d %d ",a,b,c);
    //       -1  -1  255
    // 當(dāng)要打印為%d 應(yīng)當(dāng)發(fā)生整形提升 
    //  負數(shù)為有符號型 整形提升高位補1;
    // 無符號型提升高位補0,將原高位看作數(shù)值位
    //  將 計算過程的  補碼   轉(zhuǎn)換為原碼后即為所求結(jié)果

    2.

    char a=-128;
    printf("%u\n",a);

    C語言中數(shù)據(jù)的存儲舉例分析

    char a=-128;
    //10000000 00000000 00000000 10000000
    //11111111 11111111 11111111 01111111
    //11111111 11111111 11111111 10000000
    // 截斷10000000
    // char a 有符號 按符號位提升
    //整形提升  11111111 11111111 11111111 10000000
    作為 無符號數(shù) 原反補相同
    //11111111 11111111 11111111 10000000-轉(zhuǎn)換為對應(yīng)的十進制數(shù)

    對于char范圍的討論

    有符號的(以下均為補碼)

    C語言中數(shù)據(jù)的存儲舉例分析

    C語言中數(shù)據(jù)的存儲舉例分析

    有符號char范圍 -128 --127

    例題

    char a[1000];
    int i;
    for(i=0;i<1000;i++)
    {
    a[i]=-1-i;
    }
    printf("%d",strlen(a));

    C語言中數(shù)據(jù)的存儲舉例分析

    對于 a[i]的計算結(jié)果 從 -1......-128..127....1 0

    所以所得結(jié)果為 128+127=255

    無符號(同補碼)

    C語言中數(shù)據(jù)的存儲舉例分析

    最高位視為數(shù)值位則 范圍為 0 ---255

    例題

    unsigned char i=0;
    for(i=0;i<255;i++)
    {
       printf(" hello\n");
    }

    思路同上

    程序陷入死循環(huán)

    到此,關(guān)于“C語言中數(shù)據(jù)的存儲舉例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

    向AI問一下細節(jié)

    免責(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)容。

    AI