c语言位段知识详解

简介: c语言位段知识详解

本篇文章带来位段相关知识详细讲解!

如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作的动力之源,让我们一起加油,一起奔跑,让我们顶峰相见!!!

目录

一.什么是位段

二.位段的内存分配

位段的好处

三.位段的跨平台问题

四.位段的应用


一.什么是位段

位段的声明和结构是类似的,有两个不同:

1.位段的成员必须是 int、unsigned int 或signed int

2.位段的成员名后边有一个冒号和一个数字

其中:后面的数字表示冒号前面成员所占多少个比特位;

比如:

A就是一个位段类型

那位段A的大小是多少?

这个就要引出 位段的内存分配这个问题了;

二.位段的内存分配

1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型;

2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的;

3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位端;

 

例如:

分析内存分配:

根据上面的分析:struct S  所占内存位3个字节

并且在内存中观察应该为:620304

通过代码运行验证:

根据验证:我们分析是正确的;

位段的好处

当一个变量的取值范围是0~3是,只需要用两个比特位就可以表示,就不需要给它一个整型的大小,这样就可以节省空间;

三.位段的跨平台问题

1. int 位段被当成有符号数还是无符号数是不确定的。

2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机

器会出问题。

3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。

4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是

舍弃剩余的位还是利用,这是不确定的

总结:

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

四.位段的应用

应用:IP数据包格式

本章完~


目录
相关文章
|
C语言
C语言结构体位段,枚举知识
C语言结构体位段,枚举知识
53 0
|
编译器 C语言
C语言自定义类型 — 结构体、位段、枚举、联合
本期主要对通讯录三篇博客文章进行补充 通讯录文章:通讯录系列文章 对结构体进行详细介绍,其次讲解位段、枚举、联合体
93 0
|
存储 编译器 Linux
详解结构体、位段、枚举、联合类型【C语言/进阶】
详解结构体、位段、枚举、联合类型【C语言/进阶】
76 0
|
5月前
|
编译器 C语言 C++
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
51 0
|
6月前
|
存储 C语言
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(下)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
42 0
|
6月前
|
存储 程序员 测试技术
【详解】C语言冷门知识点之--位段
【详解】C语言冷门知识点之--位段
|
6月前
|
存储 网络协议 C语言
C语言——详解位段
C语言——详解位段
49 0
C语言——详解位段
|
5月前
|
存储 编译器 C语言
C语言进阶——位段
C语言进阶——位段
32 0
|
6月前
|
存储 C语言
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(中)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
35 0
|
6月前
|
编译器 C语言 C++
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(上)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
21 0