亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C語言中數據的存儲舉例分析

發布時間:2021-11-19 13:07:56 來源:億速云 閱讀:157 作者:iii 欄目:開發技術

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

    一、類型歸類

    對于基本的c語言數據類型的基本歸類

    1、整形家族

    char (內存存儲的為ascall碼值,存儲為整數)
      unsigned char//   unsigned為無符號關鍵字 
         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 表示空類型(無類型)


    通常應用于函數的返回類型,返回參數,指針類型

    二、類型的意義

    1.占據的內存大小

    2.作為數據時所操作的大小(即為數據看待類型的視角)

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

    1. 關于 存儲的基本概念

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

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

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

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

    補碼:反碼+1;

    對于正數而言,原,反,補相同:

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

    對于負數而言

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

    對于整形數據而言再內存存儲的是補碼

    2.存儲模式

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

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

    地址的視圖

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

    關于設計判斷當前機器的字節序

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

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

    指針類型的意義

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

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

    四.應用

    應用前應掌握的基本概念 整形提升

    1.

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

    2.

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

    C語言中數據的存儲舉例分析

    char a=-128;
    //10000000 00000000 00000000 10000000
    //11111111 11111111 11111111 01111111
    //11111111 11111111 11111111 10000000
    // 截斷10000000
    // char a 有符號 按符號位提升
    //整形提升  11111111 11111111 11111111 10000000
    作為 無符號數 原反補相同
    //11111111 11111111 11111111 10000000-轉換為對應的十進制數

    對于char范圍的討論

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

    C語言中數據的存儲舉例分析

    C語言中數據的存儲舉例分析

    有符號char范圍 -128 --127

    例題

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

    C語言中數據的存儲舉例分析

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

    所以所得結果為 128+127=255

    無符號(同補碼)

    C語言中數據的存儲舉例分析

    最高位視為數值位則 范圍為 0 ---255

    例題

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

    思路同上

    程序陷入死循環

    到此,關于“C語言中數據的存儲舉例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

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

    AI

    扶绥县| 格尔木市| 中宁县| 永城市| 象山县| 蛟河市| 方城县| 台安县| 广河县| 三门县| 山东| 吴旗县| 莱阳市| 永寿县| 孟州市| 台东市| 彰武县| 中方县| 淳化县| 乐亭县| 平湖市| 信阳市| 始兴县| 南郑县| 望谟县| 石屏县| 伊吾县| 洱源县| 天气| 香格里拉县| 拜城县| 星子县| 合肥市| 墨江| 达孜县| 延津县| 临桂县| 勃利县| 陇南市| 中江县| 靖宇县|