前言
在c語言中,可以單獨操控變數的位。有時候我們通常向硬體裝置傳送一兩個位元組來控制這些裝置,每個位都有特定的含義。有些資訊在儲存時,並不需要占用乙個完整的位元組, 而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省儲存空間,並使處理簡便。c語言又提供了一種資料結構,稱為「位域」或「位段」。那什麼是位字段呢?
位欄位
位字段是c語言中一種儲存結構,不同於一般結構體的是它在定義成員的時候需要指定成員所佔的位數。
位字段是乙個signed int 或 unsigned int 型別的變數中的一組相鄰的位。位欄位通過乙個結構宣告來建立的,該結構宣告為每個字段提供標籤,並確定該字段的寬度。
位欄位宣告
在結構體宣告位欄位如下:
struct
;
位字段中變數元素的描述
type
整數型別,決定了如何解釋位域的值。 型別可以為unsigned int,signed int。
member_name
位字段的名稱。
width
位字段的寬度必須小於或者等於指定位的寬度
位欄位示例
假如我們需要乙個變數來儲存從 0 到 7 的值,可以定義乙個寬度為 3 位的位欄位。例如:
struct
stuff;
示例
#include
#include
#include
// char_bit
char
*itobs
(int n,
char
* bit_num)
;void
show_bit_str
(const
char
* str)
;struct
stuff;
intmain
(int argc,
char
const
*ar**)
char
*itobs
(int n,
char
* bit_num)
//四位一組顯示二進位制字串
void
show_bit_str
(const
char
* str)
}
輸出結果:
總結字段儲存在乙個int中順序取決於機器。在有些機器上,儲存的順序是從左往右的,而在另一一些機器上,是從右往左。
位欄位通常不可移植,有些情況下就是因為這種不可移植的特性,以特定的裝置所用於的形式儲存資料。
C語言位欄位
位欄位是 c語言中一種儲存結構,不同於一般結構體的是它在定義成員的時候需要指定成員所佔的位數。乙個位欄位必須儲存在同乙個位元組中不能跨越兩個位元組 如果乙個位元組所剩空間不夠存放另乙個位字段時 將從下一位元組起存放此位字段 可以定義無名位字段 這時它只用來作填充或調整位置 0寬度的無名位字段用來使下...
位欄位 C語言
位字段是乙個signed int 或 unsigned innt中的一組相鄰的位,位字段由乙個結構宣告建立,該結構為每個字段提供標籤,並決定欄位的寬度。例如,以下建立4個1位欄位 struct print 也可以宣告多位如 struct print 這裡需要注意乙個問題 如果宣告的總位數超過乙個un...
C語言中的位欄位
位欄位 bit filed 是c語言中一種儲存結構,不同於一般結構體的是它在定義成員的時候需要指定成員所佔的位數。位字段是乙個signed int或unsigned int型別變數中一組相鄰的位 c99和c11新增了bool型別的位欄位 位欄位通過乙個結構宣告來建立,該結構宣告為每個字段提供標籤,並...