位域的幾點說明

2021-05-28 14:11:50 字數 1033 閱讀 6868

位域,就是把乙個位元組中的二進位制位劃分為幾個不同的區域,並說明每個區域的位數。

1、很多書上都說,位域儲存在同乙個位元組中,不能跨兩個位元組儲存。個人發現這個規則有問題,下面的例子在vs 2005下能正確編譯和執行,至少說明了位域可以跨位元組:

#include using namespace std;

typedef struct s

sa;

int main ()

結果:2

2、位域允許無位網域名稱,用來填充或調整位置,不能使用。

3、如果相鄰域字段型別相同,且位寬之和小於或等於sizeof(最大成員型別)*8,則後面字段可以緊臨前乙個字段儲存(上面的**也剛好能驗證這一點,a + b = 9 + 7 = 16,等於sizeof(short) * 8 ,如果覺得這樣沒有說服力,可以定義3個short變數,分別為short a:5; short b:5; short c:6; 結果顯示,大小也為2);若大於,從新的儲存單元開始。

4、如果相鄰域字段型別不同,依賴於編譯器的具體實現。vc和vs採用不壓縮方式,即不同位域字段存放在不同的位域型別位元組中,而gcc採用壓縮方式。如:

#include struct ss

;typedef struct ss a;

int main( )

a, b, c三欄位型別相同,遵守規則3,緊臨儲存,共佔1個位元組;

在vc和vs下,由於採取不壓縮方式,加上記憶體對齊規則,sizeof(ss)為1 + 3(填充) + 4 = 8位元組;

gcc下,採取壓縮方式,sizeof(ss)=  sizeof(long) = 4,即全部儲存在long的4個位元組中。

再例如:

struct ss

;

int和long可看成同一型別,在vc和vs下b和c占用同一位元組,sizeof(ss)= 12,如果將c改為char型別,大小將變為4 +4+4+4 = 16;

gcc下sizeof(ss)=  sizeof(long) = 4

C 中位域的說明

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

多型的幾點說明

父類的引用指向子類的例項 多型實現的3個必要條件 1.繼承關係 2.子類重寫了父親方法 3.父類的引用指向子類的例項 1.良好的擴充套件性 2.方便我們的 維護 3.靈活性更好 1.父類型別作為方法的形參 2.父類型別作為方法的返回值型別 3.父類的引用指向子類的例項 1.需要根據你們的業務需求來決...

關於 引用 的幾點說明

一 引用的基本知識 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法 型別識別符號 引用名 目標變數名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引用時,必須同時對其進行初始化。4 引用宣告完畢後,相當於目標變數...