成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

五分鐘腳踩大小端模式——C語言進(jìn)階

andong777 / 1284人閱讀

摘要:我們常用的結(jié)構(gòu),就是小端模式,什么則為大端模式?jīng)]學(xué)我也不知道是個(gè)啥,但還是擺出來。

傳統(tǒng)藝能?

小編是大一菜鳥不贅述,歡迎大佬指點(diǎn)江山(QQ:1319365055)
此前博客點(diǎn)我!點(diǎn)我!請(qǐng)搜索博主 【知曉天空之藍(lán)】點(diǎn)我!點(diǎn)我!請(qǐng)搜索博主 【知曉天空之藍(lán)】或掃碼進(jìn)入!
喬喬的gitee代碼庫(打灰人歡迎訪問,點(diǎn)我!

(https://blog.51cto.com)感謝支持!

過渡區(qū)?

現(xiàn)在是北京時(shí)間17:12,思政課當(dāng)完漁夫剛回來,高產(chǎn)一波想起前天研究數(shù)組數(shù)據(jù)存儲(chǔ)模式時(shí)有涉及大小端,今天正好興致來了。今天早上睡了波回籠覺,yysy挺爽的,最近不是晚三人就是晚四人,屬實(shí)頂不住了

正片開始?

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

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

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

共用體原理?

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

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

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

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

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

引申一下
為了去確定當(dāng)前計(jì)算機(jī)的存儲(chǔ)模式,我們可以用共用體去試觸,判斷它是大端存儲(chǔ)還是小端存儲(chǔ),這樣簡單又高效。我們都知道計(jì)算機(jī)內(nèi)存是以字節(jié)為單位的劃分的,每個(gè)地址單元對(duì)應(yīng)一個(gè)字節(jié),一個(gè)字節(jié)占 8 個(gè) bit 位,一個(gè) bit 對(duì)應(yīng)存儲(chǔ)一個(gè)二進(jìn)制數(shù)據(jù),比如 00000000;另外還有 int ,long ,long long,在16位和32位處理器中,可同時(shí)處理16 bit 和32 bit 的數(shù)據(jù),寄存器寬度都大于一個(gè)字節(jié),就此我們的大小端存儲(chǔ)模式應(yīng)運(yùn)而生。

字節(jié)順序?

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

大小端存儲(chǔ)?

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


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

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

共用體判斷大小端?

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

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

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]);

效果如圖:

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

今天就到這里吧,摸了家人們。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/124502.html

相關(guān)文章

  • C語言進(jìn)階】自定義類型(2)枚舉&聯(lián)合

    目錄 一、枚舉 (一)枚舉類型的定義 (二)使用枚舉的原因? (三)枚舉的優(yōu)點(diǎn)? (四)枚舉的大小 (五)枚舉的使用 二、聯(lián)合(共用體) (一)聯(lián)合類型的定義 (二)聯(lián)合的特點(diǎn) (三)面試題 (四)聯(lián)合大小的計(jì)算 一、枚舉 枚舉顧名思義就是:列舉?。? ?即把可能的取值一一列舉出來。 比如我們現(xiàn)實(shí)生活中: 一周當(dāng)中從周一至周日的7天,可以一一列舉;性別有:男、女、保密,可以一一列舉;月份有...

    leiyi 評(píng)論0 收藏0
  • C語言進(jìn)階學(xué)習(xí)】一、數(shù)據(jù)的存儲(chǔ) (深度剖析數(shù)據(jù)在內(nèi)存中的存儲(chǔ))

    摘要:的理解和區(qū)別代表有符號(hào),整數(shù)在內(nèi)存中存儲(chǔ)的二進(jìn)制位的最高位為符號(hào)位,表示負(fù)數(shù),表示正數(shù)。那接下來我們來學(xué)習(xí)數(shù)據(jù)在所開辟的內(nèi)存空間時(shí)如何存儲(chǔ)的。請(qǐng)看下面例子為什么內(nèi)存中存儲(chǔ)的是補(bǔ)碼對(duì)于整數(shù)來說數(shù)據(jù)存放內(nèi)存中其實(shí)存放的是補(bǔ)碼。 ...

    AprilJ 評(píng)論0 收藏0
  • C語言進(jìn)階】??數(shù)據(jù)類型&&整型在內(nèi)存中的存儲(chǔ)

    目錄 ? ?一、數(shù)據(jù)類型介紹 二、類型的意義 三、類型的基本歸類 整型家族 浮點(diǎn)數(shù)家族 構(gòu)造類型(自定義類型) 指針類型 空類型 四、整形在內(nèi)存中的存儲(chǔ) 原碼、反碼、補(bǔ)碼 大小端字節(jié)序 為什么有大端和小端? 一道經(jīng)典筆試題 ?一、數(shù)據(jù)類型介紹 數(shù)據(jù)從大的方向分為兩類: 內(nèi)置類型自定義類型內(nèi)置類型我們前面已經(jīng)學(xué)習(xí)過,如下: char? ? ? ? ? ? //字符數(shù)據(jù)類型 short? ? ? ...

    Xufc 評(píng)論0 收藏0
  • JavaScript系列(四) - 收藏集 - 掘金

    摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗?dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。因此,...

    cfanr 評(píng)論0 收藏0
  • 60分鐘正則從入門到深入

    摘要:正則表達(dá)式使用單個(gè)字符串來描述匹配一系列匹配某個(gè)句法規(guī)則的字符串。接下來,是在手機(jī)正則里面已經(jīng)出現(xiàn)了。序列匹配而則匹配。分組與反向引用分組,又稱為子表達(dá)式。把正則表達(dá)式拆分成小表達(dá)式。 本文轉(zhuǎn)載自網(wǎng)絡(luò)。轉(zhuǎn)載編輯過程中,可能有遺漏或錯(cuò)誤,請(qǐng)以原文為準(zhǔn)。原文作者:水墨寒湘原文鏈接:https://juejin.im/post/582dfc... 正則表達(dá)式對(duì)于我來說一直像黑暗魔法一樣的存...

    _ang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

andong777

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<