C語言編程大小端問題示例詳解教程

今天想給大傢分享的,是數據存儲中的大小端問題,今天的分享主要分為三個部分,分別是如何理解大小端,大小端的基本概念以及大小端是如何影響數據存取的。

如何理解大小端

首先先帶大傢瞭解一個權值的概念。

對於多位數,處在某一位上的“i”所表示的數值的大小,稱為該位的位權,可以簡單理解為權值。

權值大的即為高權值位,權值小的即為低權值位,例如 0x010001,從左邊起第一個1表示的是1*2^7,第二個1表示的是1*2^0,事實上,這也是我們通常所說的位置化數字系統。

在計算機中,數據按照字節為單位,有高權值位和低權值位之分,同樣的,顯而易見,地址也同樣有高權值位和低權值位之分,為什麼呢?因為不同的地址,在計算機中也是由二進制數字表示的,不過此處應該稱為高地址位和低地址位,看圖也可得知。

看上面這些地址,很容易得出,左側為高地址位, 右側為低地址位。

既然高權值位和低權值位以及高地址位和低地址位已經闡明,那麼到底該如何理解大小端呢?

 可以看出,數據有兩種存儲形式,大小端可以簡單的理解成數據在內存中的兩種存儲形式!

大小端的基本概念

下面將給出一個以字節為單位進行存儲的數字在內存中的大小端存儲形式幫助大傢理解這個概念:

 

大小端是如何影響數據的存取的

大小端兩種存儲方案,本質上是數據和空間按照字節為單位的一種映像關系。

此處舉的是小端的情況,事實上,這類似於棧的先進後出的原則。

事實上,上述存與取的方式與下面C程序地址空間正是一致的,即壓棧與出棧的過程符合先進後出。

好瞭,今天的分享到此結束,希望大傢能夠有所收獲,如果文章中有一些不足或者錯誤的地方,希望大傢能夠不吝指正,更多關於C語言大小端的資料請關註WalkonNet其它相關文章!

推薦閱讀: