C_位域(位段)
程序员文章站
2022-07-11 18:52:55
...
位域
-
在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。
-
C语言标准规定,位域的宽度不能超过它所依附的数据类型的长度。通俗地讲,成员变量都是有类型的,这个类型限制了成员变量的最大长度,:后面的数字不能超过这个长度。
-
C语言标准还规定,只有有限的几种数据类型可以用于位域。在 ANSI C 中,这几种数据类型是 int、signed int 和 unsigned int(int 默认就是 signed int);到了 C99,_Bool 也被支持了。
-
域成员往往不占用完整的字节,有时候也不处于字节的开头位置,因此使用 &获取位域成员的地址是没有意义的,C语言也禁止这样做。地址是字节(Byte)的编号,而不是位(Bit)的编号。
实例
struct bs{
unsigned m;
unsigned n: 4;
unsigned char ch: 6;
};
**:后面的数字用来限定成员变量占用的位数。**成员 m 没有限制,根据数据类型即可推算出它占用 4 个字节(Byte)的内存。成员 n、ch 被:后面的数字限制,不能再根据数据类型计算长度,它们分别占用 4、6 位(Bit)的内存。
注意:
结构体成员很容易溢出。
下一篇: C语言 位域