什么是位段
段位的宣告的結構類似,有兩個不同:
1.位段的成員必須是int,unsigned int 或者signed int只要是整形就可以.
2.位段的成員名后邊有一個冒號和一個數字
例如
struct S { int a : 2; int b : 5; int c : 10; int d : 30; }; int main() { struct S s; printf("%d\n", sizeof(s)); }
這里怎么計算大小的呢?
我們知道一個int是站32個位元位 這里的2就是位元位
2+5+10=17 他們相加都沒有大于32 可以在一個int型別中 4個位元組 但是在加30就超過32位元位了不能存盤了就需要重新申請一個位元組
這里一共申請了2個 就是8個位元組長度
看一下他們的記憶體如何展示的 例如
struct S { char a : 3; char b : 4; char c : 5; char d : 4; }; int main() { struct S s = {0}; s.a = 10; s.b = 20; s.c = 3; s.d = 4; return 0; }
先存a 一個位元組是8個位元位 這里a是3 可以使用3個位元位 記住是高位低存
0000 1010 用到了4個位元位但是只能存3個 就是 0000 0010
在去存b b是4個位元位 大小是20 接著a繼續存
1010 0010 用了5個位元位 但只能存 4個就是 0010 0010
這里一共用了7個位元位了 最后一個位元位不夠c存盤 要重新申請一個位元組
0000 0000
c是5個位元位存3
0000 0011
還剩3個不夠d存了 重新申請
d是4個位元位存4
0000 0100
拼接起來16進制就是
2 2 0 3 0 4
0010 0010 0000 0011 0000 0100
b a c d
22 03 04 就是他的記憶體值


char 段位最大8 int 最大是32
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276539.html
標籤:C
