C语言允许在结构体中数按照位为单位存储数据。
位域的存储类型只允许signed int 或者int 类型。
- 位域的存储原则:类似于地址对齐
①当前后两个数据类型相同,写两个数据的位域宽度只和小于数据类型的位数,则后一个的数据将紧挨着前一个数据存储,否则后一个数据将从下一个存储单元开始存储。
②当前后两个数据类型不一样时,则第二个数据从第二个存储单元开始存储,而不是存储第一个的后面。
③如果位域字段之间存在非位域字段,则会从非位域字段前后截断,分别压缩存储。
④整个结构体的总大小为最宽基本类型成员大小的整数倍。 - 例子
当两个数据类型一样的时候 ,两个数据的位宽之和5+5<16,所以连个数据存储在了同一个存储单元]
当结构体中存在非位域字段时 从非位域字段处断开,前后分别压缩,且保证结构体大小是非位域字段的整数倍
当前后数据类型不一样时,则不会压缩存储