最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言進階幾分鐘帶你理解大小端存儲模式

 更新時間:2022年02月16日 08:46:53   作者:喬喬家的龍龍  
這篇文章主要為大家介紹了C語言進階大小端模式的示例詳解,帶各位讀者朋友五分鐘腳踩大小端模式,有需要的朋友可以借鑒參考下,希望能夠有所幫助

正片開始

C語言中數(shù)據(jù)類型的存儲是較為嚴謹?shù)?,一塊空間只能存儲一種數(shù)據(jù)類型,要知道內(nèi)存這個東西,在早期可是非常珍貴的。

尤其對于那些性能不好計算機更是如此,比如 Office1997,操作系統(tǒng)為Windows95 ,奔騰1的cpu,內(nèi)存只有128M。就這么綠豆點大的存儲空間,要想達到節(jié)約,利用最大化就必須在同一塊空間中存入不同類型數(shù)據(jù)。

所以共用體的概念就隨之產(chǎn)生,將幾種不同類型的內(nèi)容覆蓋到同一內(nèi)存單元,之前在我的一篇共用體專題寫過,但感覺自己總結(jié)的還不夠到位,這里再講講。

共用體原理

共用體和結(jié)構(gòu)體非常相似,共用體定義很簡單,只需要 union + 共用體名即可,舉個栗子:

union student:
{
 char name;
 short age;
 int weight;
 char sex;
};

某種意義上,共用體與結(jié)構(gòu)體是差不多的數(shù)據(jù)結(jié)構(gòu),他們都可以同時包含多種數(shù)據(jù)類型。

但是!畢竟不叫同一個名兒就不是同一個玩意兒,那他們==本質(zhì)上的區(qū)別是啥?==這里我先從內(nèi)存方面下手,對于結(jié)構(gòu)體,在內(nèi)存中,他們有各自的存儲空間,不管這個這個成員我有沒有去使用他,C語言程序都會給他分配空間, 所以有結(jié)構(gòu)體類型長度大于或等于各成員長度之和一說。

而在共用體中,各成員在一坨空間里面,空間相當于是共享的的公共空間,一個共用體類型長度等于所有成員變量中最寬數(shù)據(jù)的長度,比如我剛剛的student 這個共用體中 ,有 char,short和 int 類型,此時該共用體類型長度就是4個字節(jié),也就是 int 類型長度。強調(diào)一下,這里的共享并不是把多個變量同時放入一個共用體內(nèi),是指該共用體可被賦予任何一種變量的值,但每次賦值只能賦一種,多種還是會遵循共用體最長數(shù)據(jù)覆蓋原則,也就是說共用體在同一時間只能存放一個變量。

引申一下

為了去確定當前計算機的存儲模式,我們可以用共用體去試觸,判斷它是大端存儲還是小端存儲,這樣簡單又高效。

我們都知道計算機內(nèi)存是以字節(jié)為單位的劃分的,每個地址單元對應一個字節(jié),一個字節(jié)占 8 個 bit 位,一個 bit 對應存儲一個二進制數(shù)據(jù),比如 00000000;

另外還有 int ,long ,long long,在16位和32位處理器中,可同時處理16 bit 和32 bit 的數(shù)據(jù),寄存器寬度都大于一個字節(jié),就此我們的大小端存儲模式應運而生。

字節(jié)順序

在搞清楚大小端模式之前必須搞清楚字節(jié)的順序,在兩個設備之間進行數(shù)據(jù)的傳輸時,我要把一個東西從A傳到B,但這時發(fā)現(xiàn)在A設備中,內(nèi)容是正序的,但是B設備中的內(nèi)容是反序放著的,我們就無法在傳輸后得到正確的格式,所以就要要求統(tǒng)一的模式。

大小端存儲

大端存儲是指數(shù)據(jù)的低位字節(jié)順序會存儲在內(nèi)存的高地址中,小端存儲模式則恰恰相反,比如我將一個十六進制數(shù) 0x1234ffff,對應字節(jié)序由低到高從 f 到 1 ,從右向左依次讀取較低位字節(jié)放在地址較大的內(nèi)存單元中,如下:

在這里插入圖片描述

小端存儲則會從右向左依次讀取較低位的字節(jié)存入地址較小的內(nèi)存單元中。

在這里插入圖片描述

在這里插入圖片描述

我們常用的X86結(jié)構(gòu),ARM就是小端模式,什么 C51則為大端模式(沒學我也不知道是個啥,但還是擺出來)。

共用體判斷大小端

union num
{
int a;
char b[2];
};

比如我定義一個num共用體類型,再創(chuàng)建一個共用體變量 union num i,這時內(nèi)存中會劃分出四個字節(jié)的大小用于存放 num1;假設i的char類型 i.b = 0x1234,雖然這時我num1中的char類型沒有被賦值,但已經(jīng)被我的 int 類型所覆蓋, 我們int 類型四個字節(jié)對應四個空間,char類型只需一個空間,我們只需要觀察int的值是否在char空間中高位存放了低位字節(jié),是則為大端存儲,反之則為小端存儲,可用代碼打印如下:

printf("i.a = %x\n",i.a);
printf("i.b[0] = %x\n",i.b[0]);
printf("i.b[1] = %x\n",i.b[1]);

效果如圖:

在這里插入圖片描述

可以看出我的電腦就是小端存儲滴。

今天就到這里吧,摸了家人們,更多關于C語言進階大小端模式的資料請關注腳本之家其它相關文章!

相關文章

  • C語言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(升序)

    C語言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(升序)

    這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(升序)的相關資料,需要的朋友可以參考下
    2017-05-05
  • C++ 私有析構(gòu)函數(shù)的作用示例詳解

    C++ 私有析構(gòu)函數(shù)的作用示例詳解

    這篇文章主要介紹了C++ 私有析構(gòu)函數(shù)的作用,私有析構(gòu)函數(shù)不會影響棧上對象的自動析構(gòu),它們會在其作用域結(jié)束時自動調(diào)用析構(gòu)函數(shù)。私有析構(gòu)函數(shù)主要影響的是對堆上對象的顯式刪除操作,需要的朋友可以參考下
    2023-06-06
  • Qt實現(xiàn)簡單動態(tài)時鐘

    Qt實現(xiàn)簡單動態(tài)時鐘

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)簡單動態(tài)時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++中線性代數(shù)計算Eigen庫的使用教程詳解

    C++中線性代數(shù)計算Eigen庫的使用教程詳解

    Eigen是一個基于線性代數(shù)的C++模板庫,主要用于矩陣、向量、數(shù)值求解和相關算法,本文主要為大家簡單聊聊Eigen庫的使用,希望對大家有所幫助
    2023-12-12
  • 詳解C++中的萬能頭文件

    詳解C++中的萬能頭文件

    C++萬能頭文件它是一個包含了每一個標準庫的頭文件,接下來通過本文給大家介紹C++中的萬能頭文件及優(yōu)缺點,需要的朋友可以參考下
    2023-02-02
  • C++使用BitBlt進行窗口抓圖的方法

    C++使用BitBlt進行窗口抓圖的方法

    這篇文章主要介紹了C++使用BitBlt進行窗口抓圖的方法,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-01-01
  • Qt+OpenCV實現(xiàn)目標檢測詳解

    Qt+OpenCV實現(xiàn)目標檢測詳解

    這篇文章主要介紹了如何利用Qt和OpenCV中自帶xml文件實現(xiàn)目標檢測,文中的實現(xiàn)過程講解詳細,感興趣的小伙伴可以動手試一試
    2022-03-03
  • C++的多態(tài)和虛函數(shù)你真的了解嗎

    C++的多態(tài)和虛函數(shù)你真的了解嗎

    這篇文章主要為大家詳細介紹了C++的多態(tài)和虛函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C/C++實現(xiàn)詞法分析程序的示例代碼

    C/C++實現(xiàn)詞法分析程序的示例代碼

    這篇文章主要為大家詳細介紹了如何基于C/C++實現(xiàn)一個簡單的詞法分析程序,并通過完成詞法分析程序,了解詞法分析的過程,感興趣的小伙伴可以跟隨小編一起學習學習
    2023-05-05
  • C++超集C++/CLI模塊的基本用法

    C++超集C++/CLI模塊的基本用法

    這篇文章介紹了C++超集C++/CLI模塊的基本用法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論

威宁| 石渠县| 蕉岭县| 丰都县| 平邑县| 徐水县| 郁南县| 民和| 延长县| 泰州市| 若尔盖县| 周口市| 五大连池市| 关岭| 涟水县| 江西省| 凤庆县| 扎赉特旗| 普定县| 平塘县| 永济市| 绍兴县| 邳州市| 金门县| 漳平市| 长沙县| 比如县| 冕宁县| 和平县| 宝丰县| 台州市| 海兴县| 庄浪县| 布拖县| 台前县| 拜泉县| 庆元县| 深水埗区| 通河县| 余干县| 城市|