C語言學習筆記 位域

2021-08-18 18:06:52 字數 1180 閱讀 3431

如果程式的結構中包含多個開關量,只有 true/false 變數,如下

struct

status;

此種結構需要 8 位元組的記憶體空間,但在實際上,在每個變數中,我們只儲存 0 或 1。在這種情況下,c 語言提供了一種更好的利用記憶體空間的方式。

struct

status;

現在,上面的結構中,status 變數將占用 4 個位元組的記憶體空間,但是只有 2 位被用來儲存值。如果您用了 32 個變數,每乙個變數寬度為 1 位,那麼 status 結構將使用 4 個位元組,但只要您再多用乙個變數,如果使用了 33 個變數,那麼它將分配記憶體的下一段來儲存第 33 個變數,這個時候就開始使用 8 個位元組。

#include 

#include

/* 定義簡單的結構 */

struct

status1;

/* 定義位域結構 */

struct

status2;

int main( )

輸出結果:

memory size occupied by status1 : 8

memory size occupied by status2 : 4

struct

;

元素

描述type

整數型別,決定了如何解釋位域的值。型別可以是整型、有符號整型、無符號整型。

member_name

位網域名稱稱

width

位域中位的數量。寬度必須小於或等於指定型別的寬度

帶有預定義寬度的變數被稱為位域。

struct

age;

上面的結構定義指示 c 編譯器,age 變數將只使用 3 位來儲存這個值,如果您試圖使用超過 3 位,則無法完成。

#include 

#include

struct

age;

int main( )

輸出結果:

sizeof( age ) : 4

age.age : 4

age.age : 7

age.age : 0

c語言學習筆記 結構體位域

在學習結構體的時候遇到了位域這個概念,位域主要是為了節省記憶體空間,比如用乙個32位,4個位元組的int儲存乙個開關變數時,會造成空間浪費,於是乾脆就考慮在這個32劃分不同的區域來儲存資料,例如劃出1位存這個開關變數。struct tag unsigned int a unsigned int b ...

c語言位運算 C語言學習筆記(二)位運算

這一節主要說的是位運算,計算機中的執行速度 位運算 加減 乘除 求餘 位運算就是將數字轉換成二進位制後進行運算,之後再將數字轉換成原來的進製 與運算 當兩個數相與時,只有都為l的時候結果才為1,其餘情況結果都為0,符號 include int main 這個程式可以判斷a是偶數還是奇數,輸出為1說明...

C語言學習 位運算

原碼 就是前面所介紹的二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘位表示數值的大小。反碼 表示法規定 正數的反碼與其原碼相同 負數的反碼是對其原碼逐位取反,但符號位除外。補碼 表示法規定 正數的補碼與其原碼相同 負數的補碼是在其反碼的末位加 1 補碼是為了表示乙個負數的二進位制...