(2)當相鄰成員的型別不同時,不同的編譯器有不同的實現方案,gcc會壓縮儲存,而vc/vs不會;請看下面的位域 bs:
#include int main();
printf("%d\n", sizeof(struct bs));
return 0;
}
(3)如果成員之間穿插著非位域成員,那麼不會進行壓縮。例如對於下面的 bs:
#include int main();
printf("%d\n", sizeof(struct bs));
return 0;
}
注意:通過上面的分析,我們發現位域成員往往不占用完整的位元組,有時候也不處於位元組的開頭位置,因此使用&獲取位域成員的位址是沒有意義的,c語言也禁止這樣做。位址是位元組(byte)的編號,而不是位(bit)的編號。
C語言中位域
引自 這是c語言位域 冒號 問題 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為...
C語言中的位域
struct 位域結構名 1 使用位域可能不如使用位運算子的執行速度快,但是位域使程式更容易閱讀。2 如果某個作用域中定義了位域結構,則在該作用域中就不能使用typedef或 define來定義與位域結構名相同的型別名。3 在之前的標準中,位域型別必須是int unsigned int或signed...
C語言中的位域的使用
一 位域 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個...