位域這個實在是太罕見了,今天第一次才碰見,居然不認識,只好查了一下,發現居然是個古老的c裡面的東西,估計是當年為了節約空間搞出來的奇奇怪怪的東西。定義
struct s1
a;a.i = 5;
a.j = 14;
這樣i就只有8位(8 bits),j有4位,a有3位
然後位域有乙個奇怪的sizeof問題,其儲存方式是連續的位域部分會壓縮著儲存,能省則省,但是不能跨越位元組壓縮,最後還會有個對齊,對齊規則還是其中型別符大小和系統設定的對齊大小選乙個小的,像上面的s1用sizeof的話,就是4位元組大小。然後其他的sizeof問題,詳見這篇部落格:含位域結構體的sizeof
含位域結構體的sizeof
使用位域的主要目的是壓縮儲存,其大致規則為 1 如果相鄰位域字段的型別相同,且其位寬之和小於型別的sizeof大小,則後面的字段將緊鄰前乙個字段儲存,直到不能容納為止 2 如果相鄰位域字段的型別相同,但其位寬之和大於型別的sizeof大小,則後面的字段將從新的儲存單元開始,其偏移量為其型別大小的整數...
含位域結構體的sizeof
使用位域的主要目的是壓縮儲存,其大致規則為 1 如果相鄰位域字段的型別相同,且其位寬之和小於型別的sizeof大小,則後面的字段將緊鄰前乙個字段儲存,直到不能容納為止 2 如果相鄰位域字段的型別相同,但其位寬之和大於型別的sizeof大小,則後面的字段將從新的儲存單元開始,其偏移量為其型別大小的整數...
含位域結構體的sizeof
本文 使用位域的主要目的是壓縮儲存,其大致規則為 1 如果相鄰位域字段的型別相同,且其位寬之和小於型別的sizeof大小,則後面的字段將緊鄰前乙個字段儲存,直到不能容納為止 2 如果相鄰位域字段的型別相同,但其位寬之和大於型別的sizeof大小,則後面的字段將從新的儲存單元開始,其偏移量為其型別大小...