79.位域

2024-08-29 01:04
文章标签 位域 79

本文主要是介绍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.位域的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116401

相关文章

信息学奥赛初赛天天练-79-NOIP2015普及组-基础题4-即时通讯软件、二叉树遍历、前序遍历、中序遍历、后序遍历、算法时间复杂度

NOIP 2015 普及组 基础题4 11 下面哪种软件不属于即时通信软件( ) A QQ B MSN C 微信 D P2P 16 前序遍历序列与中序遍历序列相同的二叉树为( ) A 根结点无左子树 B 根结点无右子树 C 只有根结点的二叉树或非叶子结点只有左子树的二叉树 D 只有根结点的二叉树或非叶子结点只有右子树的二叉树 18 下列选项中不属于视频文件格式的是( ) A TXT B AV

15. 位域的定义,使用场景、使用技巧及注意点

1. 位域的定义 位域(bit-field)是 C 语言和 C++ 中的一种特殊结构体成员类型,用于定义占用特定位宽的成员。它允许我们精确控制每个成员使用的位数,而不是字节,常用于存储和传输结构中节省内存或表示紧凑的位级数据。 位域的语法如下: struct {type member_name : number_of_bits;}; type:必须是整型类型(如 int、unsigne

2-79 基于matlab的卷积稀疏的形态成分分析的医学图像融合

基于matlab的卷积稀疏的形态成分分析的医学图像融合,基于卷积稀疏性的形态分量分析 (CS-MCA) 的稀疏表示 (SR) 模型,用于像素级医学图像融合。通过 CS-MCA 模型使用预先学习的字典获得其卡通和纹理组件的 CSR。然后,合并所有源图像的稀疏系数,并使用相应的字典重建融合分量。最后,实现融合图像计算。程序已调通,可直接运行。 2-79 卷积稀疏的形态成分分析 - 小红书 (xi

【第79课】服务攻防-中间件安全IISApacheTomcatNginx弱口令错误配置CVE

免责声明 本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。 文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具

MATLAB 快速计算点到二维直线的距离并可视化(79)

计算点到二维直线距离,主要是还提供了具体的可视化方法 MATLAB 快速计算点到二维直线的距离并可视化(79) 一、算法介绍二、算法实现1.代码2.效果 一、算法介绍 问题:给定一条直线的方程 (Ax + By + C = 0) 和一个点 ((x_0, y_0)),点到直线的距离 (d) 方法:运行此脚本后,您将在 MATLAB 中看到一条红色的直线(倾斜 45

Oracle(79)绑定变量和字面值(Literal Value)的区别是什么?

绑定变量(Bind Variable)和字面值(Literal Value)在数据库查询中有着显著的区别。理解这两者的区别对于优化SQL查询性能和提高数据库安全性非常重要。 绑定变量(Bind Variable) 绑定变量是SQL查询中的占位符,在查询执行时被实际的值替代。绑定变量的主要作用是提高性能和安全性。 优点 性能提升:数据库可以重用已解析和编译的SQL执行计划,从而减少解析和编译

Leetcode JAVA刷刷站(79)单词搜索

一、题目概述 二、思路方向        为了解决这个问题,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历网格中的字符,并检查是否能形成给定的单词。这里,我提供一个基于DFS的解决方案。        在DFS中,我们需要维护一些状态,比如当前的位置(x, y)和已经访问过的字符。由于我们不能重复使用同一个单元格,我们需要一个与网格同样大小的布尔数组来记录哪些单元格已经

大话C语言:第43篇 结构体的位域

位域是结构体中的一个特殊成员,它允许我们指定该成员所占用的位数,而不是使用完整的字节或更大的单位。这在需要精确控制数据在内存中的布局时特别有用,例如在网络编程或硬件接口编程中。 位域的定义语法如下: struct 标签或者结构体名{ 数据类型 成员1 : 位宽; 数据类型 成员2 : 位宽; ... 数据类型 成员n : 位宽; }; 例如, struct Data{unsi

关于C++使用位域进行数据排序的总结

今天看了《编程珠玑》第二版的第一章,感觉使用位域进行数据排序挺有意思的,于是用C++写了一下简单的位域排序,现在来写写总结。 首先这篇文章的主题是简单的位域排序,也就是说需要满足以下的条件: 1.需要排序的数据集中不存在重复的数据; 2.对排序程序所使用的内存没有限制。 条件限制好了,然后就可以来写代码了,下面的代码均在VS2017上编写,电脑配置为i5-6200u + 8G ddr3 1

重学java 79.JDK新特性 ⑤ JDK8之后的新特性

别怕失败,大不了重头再来                                                    —— 24.6.20 一、接口的私有方法 Java8版本接口增加了两类成员:         公共的默认方法         公共的静态方法 Java9版本接口又新增了一类成员:         私有的方法 为什么IDK1.9要允许接口定义私有方法呢?