日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言重难点:大端小端

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言重难点:大端小端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一:大端和小端
  • 二:經典問題

我們知道,一個整形數據在內存中是連續排列的,它會占用內存連續的多個字節的空間,比如int a=-10,就會占用四個字節的空間

int a=-10; 原碼:1000 0000 0000 0000 0000 0000 0000 1010 反碼:1111 1111 1111 1111 1111 1111 1111 0101 補碼:1111 1111 1111 1111 1111 1111 1111 0110

因此對于-10,它對應的進制為0xfffffff6,既然整形占用4個字節,因此二進制的每8位(16進制每2位)分別存放內存中的一個字節中,也即ff,ff,ff,f6(左側為數據高位,右側為數據低位)

運行程序后,查看內存狀態,該變量在內存中狀態為

因此這四部分是按照“數據低位存放在內存低地址,數據高位存放在內存高地址”來分布的

那么是否可以按照“數據低位存放在內存高地址,數據高位存放在內存低地址”來分布呢?答案是可以的,他們分別對應小端存儲和大端存儲

至于為什么有這樣的問題,其實這是數據存儲的問題,因為早期硬件廠商很多,每個人都有自己的標準,都認為自己的標準是最合理的,所以產生了很多分歧,就像吃香蕉一樣,從頭剝皮和從尾剝皮都是沒有問題的。當然這種分歧并不嚴重,只要約定好存取的規則,怎么存就怎么取,那么數據依然是正確無誤的

一:大端和小端

大端(存儲)模式(小小小),是指數據的低位保存在內存的高地址中,而數據的高位,保存在內存的低地中
小端(存儲)模式(大大大),是指數據的低位保存在內存的低地址中,而數據的高位,,保存在內存的高地址中

二:經典問題

1:如何判斷當前機器的字節序

2:下面的程序輸出的是什么(64位操作系統)

#include <stdio.h>struct task {uint16_t id;//2個字節uint32_t value;//4個字節uint64_t timestamp;//8個字節};int main() {struct task tas = {};uint64_t a = 0x00010001;memcpy(&tas, &a, sizeof(uint64_t));printf("%11u,%11u,%11u", tas.id, tas.value, tas.timestamp);}

根據內存對齊的原則,id,value和timestamp所組成的結構體為16個字節

接著對結構體進行初始化,全部為0

變量a的存儲布局

memcpy函數用法如下

也就是從a的位置開始,向后復制16個字節

故結果為1 0 0

總結

以上是生活随笔為你收集整理的C语言重难点:大端小端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。