C语言重难点:大端小端
文章目錄
- 一:大端和小端
- 二:經典問題
我們知道,一個整形數據在內存中是連續排列的,它會占用內存連續的多個字節的空間,比如int a=-10,就會占用四個字節的空間
因此對于-10,它對應的進制為0xfffffff6,既然整形占用4個字節,因此二進制的每8位(16進制每2位)分別存放內存中的一個字節中,也即ff,ff,ff,f6(左側為數據高位,右側為數據低位)
運行程序后,查看內存狀態,該變量在內存中狀態為
因此這四部分是按照“數據低位存放在內存低地址,數據高位存放在內存高地址”來分布的
那么是否可以按照“數據低位存放在內存高地址,數據高位存放在內存低地址”來分布呢?答案是可以的,他們分別對應小端存儲和大端存儲
至于為什么有這樣的問題,其實這是數據存儲的問題,因為早期硬件廠商很多,每個人都有自己的標準,都認為自己的標準是最合理的,所以產生了很多分歧,就像吃香蕉一樣,從頭剝皮和從尾剝皮都是沒有問題的。當然這種分歧并不嚴重,只要約定好存取的規則,怎么存就怎么取,那么數據依然是正確無誤的
一:大端和小端
大端(存儲)模式(小小小),是指數據的低位保存在內存的高地址中,而數據的高位,保存在內存的低地中
小端(存儲)模式(大大大),是指數據的低位保存在內存的低地址中,而數據的高位,,保存在內存的高地址中
二:經典問題
1:如何判斷當前機器的字節序
2:下面的程序輸出的是什么(64位操作系統)
根據內存對齊的原則,id,value和timestamp所組成的結構體為16個字節
接著對結構體進行初始化,全部為0
變量a的存儲布局
memcpy函數用法如下
也就是從a的位置開始,向后復制16個字節
故結果為1 0 0
總結
以上是生活随笔為你收集整理的C语言重难点:大端小端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArcGIS AddIN开发:如何调用A
- 下一篇: JAVA作业 02 JAVA语法基础