(c语言进阶)位段

一.基础概念

位段可以控制结构体内每个元素的内存大小,单位为字节。

用于节省内存

二.位段的内存分配 

 

结构体元素为整形时,内存不够时开辟四个字节(32个比特位) 

结构体元素为字符型时,内存不够时开辟一个字节(8个比特位)

位段的成员只能是整形家族

例一:

#include<stdio.h>
typedef struct S1
{
	//元素a为int,开辟4个字节内存(32bit)
	int a : 2;
	int b : 5;
	int c : 10;
	int d : 30;
	//2+5+10+30=47>32,内存中装不下了,开辟空间
    //在vs编译器下,d存储在新开辟的空间中
    //故总共内存使用4+4=8字节(32bit)
}S1;
int main()
{
	printf("%zd",sizeof(S1));
	return 0;
}

 

 例二:

#include<stdio.h>
typedef struct S1
{
	//元素a为,开辟1个字节内存(8bit)
	char a : 3;
	char b : 4;
	char c : 5;
	//3+4+5=12>8,内存中装不下了,开辟空间
	// 在vs编译器下,c存储在新开辟的空间中
	//元素c为int,开辟1个字节(8bit)
	char d : 4;
	//5+4=9>8,内存中装不下了,开辟空间
	// 在vs编译器下,d存储在新开辟的空间中
	//元素d为int,开辟1个字节(8bit)
	//故:总共内存使用1+1+1=3个字节(24bit)
}S1;
int main()
{
	printf("%zd",sizeof(S1));
	return 0;
}

三.易错点

 1.位段申请的内存大小不能超过数据类型大小

 

2.位段在内存中的存储方式为从右向左 

#include<stdio.h>
typedef struct S1
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
}S1;
int main()
{
	S1 s = {0};
	s.a = 10;
	s.b = 12;
	s.c = 3;
	s.d = 4;
	return 0;
}

 

 

四.位段的跨平台问题 

 

若要解决跨平台问题,则要了解各个平台的底层机制来写出相应的代码。 

五.位段的现实应用

位段一般应用于网络,通过对信息数据大小的极值压缩,减少信息传输的时间和算力

相关推荐

  1. c语言-

    2023-12-06 10:08:05       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 10:08:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 10:08:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 10:08:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 10:08:05       20 阅读

热门阅读

  1. MybatisPlus

    2023-12-06 10:08:05       44 阅读
  2. RedHat8.1安装mysql5.6(GLIBC方式)

    2023-12-06 10:08:05       42 阅读
  3. 网络协议的进化之路

    2023-12-06 10:08:05       31 阅读
  4. 深入理解 Spring Boot 的 ApplicationRunner 接口

    2023-12-06 10:08:05       35 阅读
  5. 软件测试面试真题 | 什么是PO设计模式?

    2023-12-06 10:08:05       40 阅读
  6. 汇编:常用的输入与输出

    2023-12-06 10:08:05       40 阅读
  7. MySQL的事务

    2023-12-06 10:08:05       42 阅读
  8. C#结构体应用实例

    2023-12-06 10:08:05       39 阅读
  9. day7 四数之和为x

    2023-12-06 10:08:05       31 阅读
  10. Frida抓包flutter app过程记录

    2023-12-06 10:08:05       43 阅读
  11. uniapp的subnvue苹果适配(ios)谷歌地图问题

    2023-12-06 10:08:05       27 阅读