C语言-位段详解
1.位段的定義:
位段是定義結構體(或聯合體)中的成員變量所占的空間,單位是bit。含有位段的結構體(聯合體)稱為位段結構。
2.位段的意義:
能夠節省空間。比如性別,2個bit位可以表示2^2=4種可能性,不需要一個整形32個bit位。
3.位段相對于結構體的限制:
位段的聲明跟結構體相比,有兩個限制:
1.位段的成員必須是整形家族的,如int,unsigned int或signed int或char類型的,因此位段大小必須<=32bit
2.位段的成員名后邊有一個冒號和一個數字
4.位段的內存分配:
1.位段在內存空間上是按照需要以4個字節(int)或者1個字節(char)的方式來開辟的。
2.位段設計很多不確定的因素,位段是不跨平臺的,注重可移植的程序應該避免使用段位
位段舉例,如:
struct S {char a : 3; //a成員占3個比特位char b : 4; //b成員占4個比特位char c : 5; //c成員占5個比特位char d : 4; //d成員占4個比特位 };int main() {struct S s = { 0 };s.a = 10;s.b = 12;s.c = 3; s.d = 4;return 0; }結構體變量s的成員bit位使用:
a占3個bit位,但10的二進制有4個bit位1010,要存入3個bit位,低3位存入010,高1位丟棄
b占4個bit位,12的二進制有4個bit位1100,剛好可以存入4個bit位
c占5個bit位,3的二進制有2個bit位11,可以存入5個bit位
d占4個bit位,4的二進制有3個bit位100,可以存入4個bit位
使用VS2019編譯,F10調試,監視內存,輸入&s,內存中存入的就是62 03 04
?
?
?
?
總結
- 上一篇: 脑机接口数据分析工具EEGLAB01--
- 下一篇: C语言为内存分配空间(代码段、数据段、b