如果程式的結構中包含多個開關量,只有 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 補碼是為了表示乙個負數的二進位制...