#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//位段也是一种结构体类型,但有两个不同
//1.位段的成员必须是int、unsigned int 或者signed int
//2.位段的成员名后有一个冒号和一个数字。
//3.位段时不支持跨平台的
struct S
{
int a: 2;//冒号后面的值代表a只需要2个比特位
int b: 5;
int c: 10;
int d: 30;
};
//{
// int a : 3; //s.a=10//1010->010
// int b : 4;//s.b=20//10100->0100 00 10 00 10->22//前4个数组成1位后4个数组成1位
// int c : 5;//s.c=3//11->00011 00 00 00 11->03
// int d : 4;//s.d=4//100->0100 00 00 01 00->04
//};
int main()
{
struct S s;
printf("%d\n", sizeof(s));//8个字节 开辟整形空间,第一块空间用17个字节丢15个 第二块丢2个
return 0;
}
//位段跨平台问题
//1.int位段被当成有符号数,还是无符号数是不确定的。
//2.位段中最大位的数目不能确定//16位最大16,32位最大32
//3.位段中的成员在内存中从左到右分配尚未标准定义
//4.当一个结构包含两个位段,第二个位段成员比较大,无法容纳第一位剩余的位时,是舍弃剩余位,
//还是利用,这是不确定的。
//
//跟结构相比,位段可以达到同样的效果,可以很好的节省空间,但是有跨平台问题存在
//位段的应用,数据传输--空间用的特别极致