• 位域


    位域(位段):

    有时我们存储信息时并不需要用到一个完整的字节,而只需要几个二进制位。C语言提供了一种
    数据结构,称为位域(位段)用于这种情况。

    位域(位段)的定义:

    struct name{
        类型名 位域名:位域长度;   // 位域长度不能大于8(即一个字节)
    };

    注意:

    一个位域必须存储在同一个字节中,当有两个连续的位域,在一个字节中存放第一个位域后剩下
    的空间不足以存放第二个位域,则第二个位域将存放在一个新的字节中,前一个字节多余的未补0
    struct bits{
        int a:4;   // 第一个字节 
        int b:5;   // 第二个字节 
    };

    我们也可以显式使得某个位域存放在一个新的字节中,即使用空域

    struct bits{
        int a:4;  // 第一个字节 
        int :0;   // 空域 
        int b:2;  // 第二个字节 
    }; 

    当一个位域无位域名时,它只是用来作为填充或调整位置,不能被使用(int :4 仅仅是用来占4位)

    位域结构的长度:

    // 以下测试在Dev-cpp环境下完成的
    //
    len = sizeof(bits) struct bits{ }; // len = 1 struct bits{ char ch; }; // len = 1 struct bits{ char a:2; }; // len = 1 struct bits{ char a:2; char b:2; }; // len = 1 struct bits{ char a:2; char b:2; char c:4; }; // len = 1 struct bits{ char a:2; char b:2; char c:4; char d:4; }; struct bits{ int n; }; // len = 4 struct bits{ int a:4; }; // len = 4 struct bits{ int a:4; int b:4; }; // len = 4 struct bits{ char a:8; int i:4; }; // len = 4 struct bits{ char a:8; char b:8; int i:4; }; // len = 4 struct bits{ char a:8; char b:8; char c:8; char d:8; int i:4; }; // len = 8

    结论:

    1.位域(位段)结构的大小既取决于结构内部所有位域的总大小,也取决于该位域声明时的类型
    2.当一个位域结构内部所有位域总大小小于该结构中位域声明时的类型中长度最大的类型长度
    时,该结构大小为该类型长度 (此处用用大小和长度区分自定义结构和C语言内置类型)
    3.位域结构的大小总为该结构中存在的所有的位域在声明时所用的内置类型中长度最大的内置
    类型的长度的整数倍(如上述示例中的最后一个 len = 8)
     

  • 相关阅读:
    原创 128的二进制有原码 反码和补码
    asp.net中进行获取当前时间以及当前时间的前后几个月
    dropdownlist的使用
    CutEditor在线编辑器的使用
    Repeater 嵌套用法
    使用cuteeditor进行视频上传
    电脑知识大全(快捷键大全)
    web.config
    项目总结(大唐)
    上传视频和图片的同时,生成缩略图
  • 原文地址:https://www.cnblogs.com/lnlin/p/9745828.html
Copyright © 2020-2023  润新知