<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
C語言中資料型別的儲存是較為嚴謹的,一塊空間只能儲存一種資料型別,要知道記憶體這個東西,在早期可是非常珍貴的。
尤其對於那些效能不好計算機更是如此,比如 Office1997,作業系統為Windows95 ,奔騰1的cpu,記憶體只有128M。就這麼綠豆點大的儲存空間,要想達到節約,利用最大化就必須在同一塊空間中存入不同型別資料。
所以共用體的概念就隨之產生,將幾種不同型別的內容覆蓋到同一記憶體單元,之前在我的一篇共用體專題寫過,但感覺自己總結的還不夠到位,這裡再講講。
共用體和結構體非常相似,共用體定義很簡單,只需要 union + 共用體名即可,舉個栗子:
union student: { char name; short age; int weight; char sex; };
某種意義上,共用體與結構體是差不多的資料結構,他們都可以同時包含多種資料型別。
但是!畢竟不叫同一個名兒就不是同一個玩意兒,那他們==本質上的區別是啥?==這裡我先從記憶體方面下手,對於結構體,在記憶體中,他們有各自的儲存空間,不管這個這個成員我有沒有去使用他,C語言程式都會給他分配空間, 所以有結構體型別長度大於或等於各成員長度之和一說。
而在共用體中,各成員在一坨空間裡面,空間相當於是共用的的公共空間,一個共用體型別長度等於所有成員變數中最寬資料的長度,比如我剛剛的student 這個共用體中 ,有 char,short和 int 型別,此時該共用體型別長度就是4個位元組,也就是 int 型別長度。強調一下,這裡的共用並不是把多個變數同時放入一個共用體內,是指該共用體可被賦予任何一種變數的值,但每次賦值只能賦一種,多種還是會遵循共用體最長資料覆蓋原則,也就是說共用體在同一時間只能存放一個變數。
為了去確定當前計算機的儲存模式,我們可以用共用體去試觸,判斷它是大端儲存還是小端儲存,這樣簡單又高效。
我們都知道計算機記憶體是以位元組為單位的劃分的,每個地址單元對應一個位元組,一個位元組佔 8 個 bit 位,一個 bit 對應儲存一個二進位制資料,比如 00000000;
另外還有 int ,long ,long long,在16位元和32位元處理器中,可同時處理16 bit 和32 bit 的資料,暫存器寬度都大於一個位元組,就此我們的大小端儲存模式應運而生。
在搞清楚大小端模式之前必須搞清楚位元組的順序,在兩個裝置之間進行資料的傳輸時,我要把一個東西從A傳到B,但這時發現在A裝置中,內容是正序的,但是B裝置中的內容是反序放著的,我們就無法在傳輸後得到正確的格式,所以就要要求統一的模式。
大端儲存是指資料的低位位元組順序會儲存在記憶體的高地址中,小端儲存模式則恰恰相反,比如我將一個十六進位制數 0x1234ffff,對應位元組序由低到高從 f 到 1 ,從右向左依次讀取較低位位元組放在地址較大的記憶體單元中,如下:
小端儲存則會從右向左依次讀取較低位的位元組存入地址較小的記憶體單元中。
我們常用的X86結構,ARM就是小端模式,什麼 C51則為大端模式(沒學我也不知道是個啥,但還是擺出來)。
union num { int a; char b[2]; };
比如我定義一個num共用體型別,再建立一個共用體變數 union num i,這時記憶體中會劃分出四個位元組的大小用於存放 num1;假設i的char型別 i.b = 0x1234,雖然這時我num1中的char型別沒有被賦值,但已經被我的 int 型別所覆蓋, 我們int 型別四個位元組對應四個空間,char型別只需一個空間,我們只需要觀察int的值是否在char空間中高位存放了低位位元組,是則為大端儲存,反之則為小端儲存,可用程式碼列印如下:
printf("i.a = %xn",i.a); printf("i.b[0] = %xn",i.b[0]); printf("i.b[1] = %xn",i.b[1]);
效果如圖:
可以看出我的電腦就是小端儲存滴。
今天就到這裡吧,摸了家人們,更多關於C語言進階大小端模式的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45