C语言-位段详解

简介: C语言-位段详解

1.位段的定义:

位段是定义结构体(或联合体)中的成员变量所占的空间,单位是bit。含有位段的结构体(联合体)称为位段结构。


2.位段的意义:

能够节省空间。比如性别,2个bit位可以表示2^2=4种可能性,不需要一个整形32个bit位。


3.位段相对于结构体的限制:

位段的声明跟结构体相比,有两个限制:

1.位段的成员必须是整形家族的,如int,unsigned int或signed int或char类型的,因此位段大小必须<=32bit

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


4.位段的内存分配:

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

2.位段设计很多不确定的因素,位段是不跨平台的,注重可移植的程序应该避免使用段位

位段举例,如:

1. struct S
2. {
3.  char a : 3; //a成员占3个比特位
4.  char b : 4; //b成员占4个比特位
5.  char c : 5; //c成员占5个比特位
6.  char d : 4; //d成员占4个比特位
7. };
8. 
9. int main()
10. {
11. 
12.   struct S s = { 0 };
13.   s.a = 10;
14.   s.b = 12;
15.   s.c = 3; 
16.   s.d = 4;
17. return 0;
18. }

结构体变量s的成员bit位使用:

a占3个bit位,但10的二进制有4个bit位1010,要存入3个bit位,低3位存入010,高1位丢弃

b占4个bit位,12的二进制有4个bit位1100,刚好可以存入4个bit位

c占5个bit位,3的二进制有2个bit位11,可以存入5个bit位

d占4个bit位,4的二进制有3个bit位100,可以存入4个bit位

使用VS2019编译,F10调试,监视内存,输入&s,内存中存入的就是62 03 04

 

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