C 位域學習

2022-03-12 10:17:36 字數 1066 閱讀 9188

c++位域

visual studio 2012 - visual c++

c++位域

類和結構可以包含比整型占用小於儲存的成員。

這些成員指定為位域。

位域 成員宣告 規範的語法如下:

declarator  : constant-expression
備註(可選) declarator 是該成員在程式捕獲的名稱。

它必須是整型 (包括列舉型別)。

常數表示式 指定該成員在結構占用的位數。

匿名位域,即不識別符號的位域成員 )可用於填充使用。

說明

寬度為 0 的乙個未命名的位域強制下一位域的對齊到下一 type 邊界, type 是該成員的型別。

下面的示例宣告一位域的機制:

// bit_fields1.cpp

// compile with: /ld

struct date ;

型別 date 物件的概念記憶體布局如下圖所示。

date 物件記憶體布局

請注意 nyear 長度為 8 位並將導致溢位該宣告的型別,unsigned short的字邊界。

因此,它在新unsigned short的開頭開始。

不需要的與基礎型別的物件所有位域;儲存新的單位基於在宣告請求的位數分配,。

microsoft 專用

作為位域宣告的排序資料是從低到高位,如上面該圖所示。

特定於 microsoft 的結尾

如下面的示例所示,如果結構的宣告包括長度為 0 的乙個未命名的字段,,

// bit_fields2.cpp

// compile with: /ld

struct date ;

如下圖所示,記憶體布局是。

date 物件布局與零的位域的

位域的基礎型別必須是整型,如

基礎型別

所述。 

C語言學習筆記 位域

如果程式的結構中包含多個開關量,只有 true false 變數,如下 struct status 此種結構需要 8 位元組的記憶體空間,但在實際上,在每個變數中,我們只儲存 0 或 1。在這種情況下,c 語言提供了一種更好的利用記憶體空間的方式。struct status 現在,上面的結構中,st...

C語言位域

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存 放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區域的位...

C語言位域

1.乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。如乙個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如 struct bs 在這個位域定義中,a佔第一位元組的 2位,後6位填 0表示不使用,c 從第二位元組開始,占用1位 2.由於位域不允許跨...