欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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/C++ c语言