C语言-10-位域与共用体
位域
在某种特定情况下,一个结构体中的多个变量只使用各自存储空间的几位,而其他位从来不使用。这种情况下,可以使用位域来限定每个变量的用来存储数据的位宽。
作用
- 限定结构体中变量用来存放数据的位宽,即使用多少位来存储变量
注意
使用位域的结构体所占的内存空间为结构体中占用内存空间最多的结构体变量所占用的内存空间大小,如:有long和int,最终结构所占的内存空间为long类型所占用的内存空间(8字节)
#include <stdio.h>
struct {
unsigned int intVariable1 : 1;
unsigned int intVariable2 : 1;
} intStruct;
struct {
unsigned long longVariable : 1;
unsigned int intVariable : 1;
} longStruct;
int main(int argc, const char * argv[]) {
printf("%zd\n", sizeof(intStruct)); // 结果为:4
printf("%zd\n", sizeof(longStruct)); // 结果为:8
return 0;
}
使用位域限制的结构体变量,不可以存储超过限定位宽所能表示的最大范围的变量,否则多余的高位将截断
// 使用上述的结构体
int main(int argc, const char * argv[]) {
intStruct.intVariable1 = 0;
printf("%d\n", intStruct.intVariable1);
intStruct.intVariable1 = 1;
printf("%d\n", intStruct.intVariable1);
// 下一行会发出警告:Implicit truncation from 'int' to bitfield changes value from 2 to 0
intStruct.intVariable1 = 3;
printf("%d\n", intStruct.intVariable1);
return 0;
}
共用体
共用体是一种数据类型,实现在相同的位置存储不同的数据类型,但是在某一时刻只能保存一种数据。
定义方式
union [union tag]
{
member definition;
member definition;
...
member definition;
} [one or more union variables];
注意
- 共用体所占的内存空间大小为共用体中占用内存空间最多的共用体变量所占的内存空间大小。
- 公用通常应用于几个互斥的变量上
C语言-10-位域与共用体的更多相关文章
- C语言高级-结构,共用体,文件,链表
C语言结构 标准声明方式 struct student{ int age; char sex; }; 这个可以在main函数中定义: struct student ...
- C语言共用体union
union共用体说明: 当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍. 比如union中有{int x; double x1; char name[10] ...
- [C#.NET 拾遗补漏]14:使用结构体实现共用体
在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为 ...
- C学习笔记(6)--- 共用体,位域深入
1.共用体(Union): 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置 ...
- C/C++编程笔记:C语言对齐问题【结构体、栈内存以及位域对齐】
引言 考虑下面的结构体定义: 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4. 现在,我们编写一个简单的程序: 运行后输出: 为什么会这 ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- c的详细学习(10)结构体与共用体的学习(二)
在c语言中,结构体数据类型与共用体数据类型都属于构造类型.共用体与结构体数据类型在定义上十分相似,但它们在存储空间的占用分配上有本质的区别.结构体变量是各种类型数据的集合,各成员占据不同的存储空间,而 ...
- 07.C语言:结构体、共用体、枚举
一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...
随机推荐
- 单链表List的C实现
头文件———————————————————————————————— //单链表的实现 #ifndef _LIST_H_ #define _LIST_H_ #include <stdlib.h ...
- 新找到一个安装Android SDk的方法-记录
此方法需使用国内的镜像,但是国内镜像网速不一定要很快. 迅雷下载工具这个是必须的. 今天注意到SDK目录下有一个temp文件夹,打开看了看发现就是缓存的目录,因此想到直接从镜像站下载相应的包来替换,测 ...
- ASP.NET WebForm与MVC优缺点
发表于我的个人网站中,请点击阅读!
- nodejs+express+jade给我baby做个小相册
去年年底迎来了my little star.从此人生多了一个最重要的牵挂.生了宝宝全家人都太忙了.最近宝宝稍微大点了,终于有空可以研究下技术了.这是14年第一帖.废话不多了.开始吧 1.安装NTVS ...
- RCU-数据库初始化参数
C:\Windows\System32>sqlplus sys/As123456 as sysdba SQL> show parameter processes; SQL> shut ...
- 开发(ASP.NET程序)把写代码写至最有面向对象味道
前几天,搬房子时又拿起<重构----改善既有代码的设计>这本书来随便翻来看下,重构Refactoring在开发时,是时常也经常会使用得到. 她确实教我们怎样把写程序写简洁,清楚 好明白,好 ...
- 2016年5月11日摘自知乎的一些Redis大概了解
1. 知乎日报的基础数据和统计信息是用 Redis 存储的,这使得请求的平均响应时间能在 10ms 以下.其他数据仍然需要存放在另外的地方,其实完全用 Redis 也是可行的,主要的考量是内存占用.就 ...
- SQL Server 2008 评估期已过解决方法
SQL Server 2008有180天的试用期,过期后会提示“评估期已过”的提示. 1.进入SQL Server安装中心: 2.选择“维护”-“版本升级” 3.输入密钥: 其他的根据提示操作. 附S ...
- DevExpress GridControl功能总结
写在前面,Dev控件已经很久了,功能也很强大,截止到现在我编写文档出来的Dev的版本已经到了14.1了,看了Demo真的很强大,效果也很好,结合自己这一个月开发,分享一下自己研究过后的经验,不让大家走 ...
- [moka同学笔记]yii2.0小物件的简单使用(第二种方法)
1.在widgets/TestWidget.php中 <?php /** * Created by PhpStorm. * User: moka同学 * Date: 2016/08/05 * T ...