当前位置 : 主页 > 编程语言 > c语言 >

结构体-位段

来源:互联网 收集:自由互联 发布时间:2023-09-07
#define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h //位段也是一种结构体类型,但有两个不同 //1.位段的成员必须是int、unsigned int 或者signed int //2.位段的成员名后有一个冒号和一个数字。 //3.位段时

#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.当一个结构包含两个位段,第二个位段成员比较大,无法容纳第一位剩余的位时,是舍弃剩余位,

//还是利用,这是不确定的。

//

//跟结构相比,位段可以达到同样的效果,可以很好的节省空间,但是有跨平台问题存在


//位段的应用,数据传输--空间用的特别极致

上一篇:【数据结构】单链表
下一篇:没有了
网友评论