c語言 位域在記憶體中的存放

2022-08-23 14:15:09 字數 1017 閱讀 7588

位域在實際開發中可能用的比較少,但是對於理解記憶體儲存資料非常有幫助!

我們可以在結構體或共用體中描述乙個簡單的位域:

```struct

st;```* 首先我們先說說這個結構體在記憶體中所佔的大小

st變數占用了1個位元組,但只有3位(bit)用來儲存資料。當然如果用的是int型別,將會占用4個位元組,這是位元組對齊的緣故。*1位元組(byte)=8位(bit),位是計算機中最小資料儲存單位。*

假設資料從左側開始寫入,那麼首先寫入的資料存放在最右側,等到資料寫入完,未寫入的位補0。

據上所述,每個位都是有標記的,所以在讀取位域時,可以準確讀取指定位置的位。

*我們使用位域與共用體和結構體做個小例子來理解

事先宣告:由於計算機中有符號的整數都以補碼形式存在,而不會出現像初期原碼表示帶符號的數字存在兩個0(+0與-0),所以把原碼中表示-0的數字來表示最大的負數。也就是當只有符號位為1時,代表符號位的1也算到數字位中去了。二進位制10表示有符號位十進位制-2、二進位制1表示有符號十進位制-1等等。

union

st; char y;

}un; //宣告共用體變數名為un

int main()

結果:

-1 0 0
這個共用體的大小位為1位元組,對un.y賦值為1,1轉為二進位制還是1,其他位補0,我們把資料在記憶體中的分布進行展示:

可以看到除了序號為0的位是1,其他位都是0。如果對un.y賦值為3呢?

把**輸完一執行

結果:

-1 -1 0
資料在記憶體的分布應該是這樣的

3轉為二進位制就是11,其他位補0,就是這樣的結果了。

c語言 結構體在記憶體中的存放形式

第一篇部落格,請大家多多包涵!使用sizeof 運算子計算結構體在記憶體中所占用的位元組數很明顯可以看到與實際宣告型別的位元組數不同。sizeof 是用來計算型別在記憶體中所佔位元組數的大小 對於剛入門的同學肯定會很疑惑,結構體在記憶體中到底是怎樣存放的呢?struct nameattribute ...

bmp在記憶體中的存放

bmp 儲存影象 每張圖按大小來儲存,即影象的長寬畫素大小。如果一張的畫素是 240x320,則此影象在記憶體的存放是乙個 240x320的陣列,每個陣列的元素是int整形 整數占用4個byte 數位相機中所謂的支援500w畫素就是這個意思,代表它能處理多大的圖形色彩資訊的能力,畫素越高,需要處理時...

資料在記憶體中的存放

在計算機系統中,執行的應用程式的資料都是儲存在記憶體之中 不同型別的資料,儲存的記憶體區域不同,其中包括 1 棧區 stack 由編譯器自動分配並釋放,一般存放函式的引數值,區域性變數等 2 堆區 heap 由程式設計師分配和釋放,如果程式設計師不釋放,程式結束時,可能會由作業系統 3 暫存器區 用...