结构体对齐、位域结构体

1、结构体对齐

按照结构体中最大字节元素的字节个数对齐,比方说有最大基本元素数据类型为int,按照4字节对齐。最大为short,按照2字节对齐。

typedef struct    //最大的元素的基本数据类型为(int)4个字节
{
  char numChar;  //占据一个字节
  int numInt;    //第一个位只剩3字节,无法容下int,只能占据第二位(四字节为一个对齐单位)。
  short numShort;  //占据第三位,补上2个字节
}test1;    //sizeof(test1)=12;
typedef struct
{
  int numInt;
  char numChar;
  short numShort;
}test2;  //sizeof(test2)=8;
typedef struct
{
  short numInt;
  char hah;
  short numShort;
  char numChar;
}test3;  //sizeof(test3)=8;

2、位域结构体

位结构体是一种特殊的结构体,在需访问某个字节或者某个字节的指定位的时候,位结构体比按位操作简便

typedef struct {
  float adCheckValue;   //AD判断阈值
  int tianNum;   //车号
  struct{
    char checkStatus : 4;   //自检状态,占据第一个字节(char)的低四位。
    char AlarmStatus : 4;   //报警状态,占据第一个字节(char)的高四位。
    ushort overFlowCnt : 8;  //失稳溢出计数,占据第三个字节
    ushort isOpen : 1;  //占据第3个字节的第0位
  }statusData;
}OriginalData;

坚持成就伟大
原文地址:https://www.cnblogs.com/xian-yongchao/p/9542561.html