關於位域的理解

2021-07-05 01:17:44 字數 740 閱讀 5902

有些資訊在儲存時,並不需要占用乙個完整的位元組, 而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言提供了一種資料結構,稱為「位域」或「位段」。所謂「位域」是把乙個型別單元中的二進位劃分為幾個不同的區域, 並說明每個區域的位數。每個域有乙個網域名稱,允許在程式中按網域名稱進行操作。 這樣就可以達到壓縮資料的目的。

位域定義

位域定義與結構定義相仿,其形式為:

struct

slabel ;

struct

foo4

t;t.c = 50*1024;

printf("%d",t.c);

intlen = sizeof(foo4);

printf("%d",len);

return 0;

輸出t.c是51200,可以看出c可以取到18bits。

2.       因為在乙個byte中,bit位也是有分big-endian和small-endian的,所以位域的移植性並不好。不過在嵌入式中由於有許多特定的裝置,在此中可以盡情使用位域。

在本文中,位域型別就是資料型別,呵呵。位域可以看作是取值範圍縮小了的位域型別,所有對位域型別能做的操作,對位域都能做。比較難的地方在於位域字段的壓縮與對齊。嗯,還有

signed

和unsigned

型別要特別注意。

理解C語言位域

這也是在chinaunix上看了幾篇關於c語言 位域 bit fields 的帖子之後,才想寫下這篇文章的。其實在平時的工作中很少使用到 位域 我是搞伺服器端程式設計的,大容量的記憶體可以讓我毫不猶豫的任意 揮霍 想必搞嵌入式程式設計的朋友們對位域的使用應該不陌生吧。這裡我也僅僅是憑著對c語言鑽研的...

理解C語言位域

理解c語言位域 這也是在chinaunix 上 看了幾篇關於c語言 位域 bit fields 的帖子之後,才想寫下這篇文章的。其實在平時的工作中很少使用到 位域 我是搞伺服器端程式設計的,大容量的記憶體可以讓我毫不猶豫的任 意 揮霍 想必搞嵌入式程式設計的朋友們對位域的使用應該不陌生吧。這裡我也僅...

關於作用域的理解

由花括號括起來的整體作為乙個塊,塊中的變數都具有塊作用域,僅僅在塊中可見。函式的形式參量雖然在左花括號之前,但仍具有塊作用域,塊作用域的可見範圍是從定義出開始到塊。宣告在內層塊的變數,其作用域僅僅侷限於該宣告所在的塊。double blocky double cleo q 作用域結束 return ...