• C语言-10-位域与共用体


    位域

    在某种特定情况下,一个结构体中的多个变量只使用各自存储空间的几位,而其他位从来不使用。这种情况下,可以使用位域来限定每个变量的用来存储数据的位宽。
    
    • 作用

      • 限定结构体中变量用来存放数据的位宽,即使用多少位来存储变量
    • 注意

      • 使用位域的结构体所占的内存空间为结构体中占用内存空间最多的结构体变量所占用的内存空间大小,如:有long和int,最终结构所占的内存空间为long类型所占用的内存空间(8字节)

        #include <stdio.h>
        struct {
            unsigned int intVariable1 : 1;
            unsigned int intVariable2 : 1;
        } intStruct;
        struct {
            unsigned long longVariable : 1;
            unsigned int intVariable : 1;
        } longStruct;
        int main(int argc, const char * argv[]) {
            printf("%zd
        ", sizeof(intStruct)); // 结果为:4
            printf("%zd
        ", sizeof(longStruct)); // 结果为:8
            return 0;
        }
        
      • 使用位域限制的结构体变量,不可以存储超过限定位宽所能表示的最大范围的变量,否则多余的高位将截断

        // 使用上述的结构体
        int main(int argc, const char * argv[]) {
            intStruct.intVariable1 = 0;
            printf("%d
        ", intStruct.intVariable1);
            intStruct.intVariable1 = 1;
            printf("%d
        ", intStruct.intVariable1);
            // 下一行会发出警告:Implicit truncation from 'int' to bitfield changes value from 2 to 0
            intStruct.intVariable1 = 3;
            printf("%d
        ", intStruct.intVariable1);
            return 0;
        }
        

    共用体

    共用体是一种数据类型,实现在相同的位置存储不同的数据类型,但是在某一时刻只能保存一种数据。
    
    • 定义方式

      union [union tag]
      {
         member definition;
         member definition;
         ...
         member definition;
      } [one or more union variables];
      
    • 注意

      • 共用体所占的内存空间大小为共用体中占用内存空间最多的共用体变量所占的内存空间大小。
      • 公用通常应用于几个互斥的变量上
  • 相关阅读:
    GridView, ListView 区别
    ActivityGroup和TabActiviy的差异性?
    Java加密解压
    Android代码中实现WAP方式联网
    SVN创建资源库和远程连接配置
    高仿优酷Android客户端图片左右滑动(自动切换)
    andoid 多线程断点下载
    Android中用Java代码实现zip文件解压缩
    JAVA两种实现二分查找方式
    三种JAVA编程方法实现斐波那契数列
  • 原文地址:https://www.cnblogs.com/theDesertIslandOutOfTheWorld/p/5197087.html
Copyright © 2020-2023  润新知