C中的位域與sizeof

2021-07-25 06:25:33 字數 377 閱讀 1063

位域這個實在是太罕見了,今天第一次才碰見,居然不認識,只好查了一下,發現居然是個古老的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大小,則後面的字段將從新的儲存單元開始,其偏移量為其型別大小...