C语言--- 什么是位域?

文章目录

  • 前言
  • 一、什么是位域
    • 1、定义
  • 二、如何使用位域


前言

再一次机缘巧合的情况下,我第一次偶然的听说“位域”这个名词,当我查询了一下,发现它是一个关于C语言的知识点。并且在嵌入式的开发当中经常用到。于是这篇博客诞生。对于位域的知识点,指花了两个小时看了一篇博客,所以我不敢保证这篇博客没有错误,如有问题,请多多指教啦~~~


一、什么是位域

1、定义

允许在一个结构体中以位为单位来指定其成员长度,这种以单位的成员称为“位段”或者“位域”。

定义中涉及了结构体,所以,位域和结构体的关系紧密。

再说一点,位域之所以叫做位域,是因为对位操作(bit)。这样做是因为在编程开发中,有时候不需要占用一根完整的字节,只需要使用几个bit或者一个bit,所以使用位域就是来节省内存空间的,并且能简单处理。

// 函数中的定义:
struct dataA{

	unsigned int a : 1;
//  :冒号后面的数字表示使用几个bit位。a成员占用一个bit位。
// 如果是unsigned int a : 3;就表示a占用是三个bit位
	unsigned int b : 1;
	unsigned int c : 1;
	unsigned int d : 1;

};

解析:这是一个结构体,这是显而易见的。
结构体的成员是无符号int类型。a,b,c,
d这4个成员都是占用的一个bit位。

众所周知,在32位系统中,unsigned int
是占用4个字节。那么思考一下:
(1)sizeof(struct dataA) = ?
(2)四个成员占用的bit位是哪里的?

答案: struct dataA 所占内存是4个字节。
四个成员所占的那个bit位都是每一个字节的bit0.

看到这里,或许你还不太清楚为什么struct dataA 所占内存是4个字节。
答:因为,第一个结构体的成员是unsigned int类型,占4个字节,所以先给位域结构体分配4个字节,若这4个字节不够后面的成员使用,就另开辟4个字节。但是abcd成员都是只占用一个bit,所以一共就才占用4个bit,4字节怎么就购了。

这篇博客就写的很清楚。

结构体的字节对齐访问主要就两点:系统架构是多少位的,这个就决定对齐访问是4字节对齐还是8字节对齐;内存的分配是以字节位单位。

二、如何使用位域

对于位域的使用,除了知道如何定义位域以外,还需要了解位域在内存中的分配。
具体的内容就是我上面推荐的那一篇博客,其他的我没有啥好讲的。


你可能感兴趣的:(C语言,c语言,开发语言)