本文主要是介绍79.位域,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一.位域的概念
二.语法格式
三.无名位域
四.视频教程
一.位域的概念
有些数据在存储的时候并不需要一个完整的字节。比如使用一个变量表示开关的状态,开关只有开和关俩个状态,所以只需要使用0和1表示,也就是一个二进制位。所以这时候使用一个完整的字节就比较浪费内存,正是基于这种考虑,C语言提供了一种数据结构,叫做位域。
二.语法格式
在结构体成员后面使用冒号(:)和数字表示改成员所占的位数。
struct Test{unsigned int a:1;unsigned int b:2;unsigned int c:3;};注意:位域的宽度不能超过数据类型的长度
举例:
#include <stdio.h>struct TEST
{unsigned int a:1;unsigned int b:2;unsigned int c:3;
};int main(void)
{struct TEST test;test.a = 1;test.b = 2;test.c = 3;printf("sizeof = %ld\n",sizeof(test));return 0;}
运行结果:
原因:
实际a、b、c一共占用6bit,还有26bit空间为保留的空白
三.无名位域
位域成员可以没有名称,只给出数据类型和位宽即可。一般用来作填充或者调整成员位置。因为没有名称,无名位域不能使用。
举例:
#include <stdio.h>struct TEST
{unsigned int a:20;unsigned int :20;unsigned int c:3;
};int main(void)
{struct TEST test;test.a = 1;//test.b = 2;test.c = 3;printf("sizeof = %ld\n",sizeof(test));return 0;}
运行结果:
原因:
如果没有位宽为12的无名成员,a、c 将会挨着存储,sizeof的结果为 4;有了这12位作为填充,a、c将分开存储,sizeof的结果为 8。
四.视频教程
78.位域_哔哩哔哩_bilibili
这篇关于79.位域的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!