关于C语言中位字段的问题

来自《C Primer Plus》第六版
书中关于
struct{
unsigned a:1;
unsigned a:1;
unsigned :4;
unsigned a:0;}prnt;

这个结构中的第4和0的说法:如果**声明的总位数**超过了一个unsigned 类型大小,会用到下一个unsigned类型的存储位置(这一句理解的是说通常情况下存储的方式?)。一个字段不允许跨越两个unsigned的边界(这句按我的理解是在字段这个存储方式上上一句的情况禁止发生?)。编译器会自动移动跨界的字段,保持unsigned边界对齐(这句理解)。一旦发生这种情况,第一个unsigned会留下一个未命名的洞(问题一,上一个不应该是unsigned存满溢出吗?怎么会出现洞)。
可用未命名字段宽度填充未命名的洞(这是一种规定吗?),使用一个宽度为0的未命名字段迫使下一个字段和下一个整数对齐(也没理解)。
希望各位能够帮助理解一下这段话。谢谢!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!