C语言-位段详解

2023-11-02

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.位段设计很多不确定的因素,位段是不跨平台的,注重可移植的程序应该避免使用段位

位段举例,如:

struct S
{
	char a : 3; //a成员占3个比特位
	char b : 4; //b成员占4个比特位
	char c : 5; //c成员占5个比特位
	char d : 4; //d成员占4个比特位
};

int main()
{
	
	struct S s = { 0 };
	s.a = 10;
	s.b = 12;
	s.c = 3; 
	s.d = 4;
    return 0;
}

结构体变量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

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言-位段详解 的相关文章

  • 解决webstorm中ts自动编译

    解决webstorm中ts自动编译 我们可以首先写一段ts代码 然后在终端执行tsc helloworld ts来编译为js代码 下面运行代码 使用node helloworld js来运行 但是当我们改变ts内容时 js内容不会对应改变

随机推荐

  • python中的科学计数法表示

    在python中如何使用科学计数法对我们想要定义的变量进行赋值呢 请看以下代码 coding utf 8 author 15025 time 2021 8 2 14 43 software PyCharm Description Scien
  • Linux开发工具之项目自动化构建工具-make/Makefile

    make是一条命令 makefile是一个文件 两个搭配使用 完成项目自动化构建 makefile带来的好处就是自动化编译 一旦写好 只需要一个make命令 整个工程完全自动编 译 极大的提高了软件开发的效率 下面来看一个实例 在Makef
  • mysql 优化之索引视图和索引为何未调用

    如何判断语句运行速度的快慢呢 执行计划 在mysql中我们可以通过explain显示了mysql如何使用索引来处理select语句以及连接表 可以帮助选择更好的索引和写出更优化的查询语句 我们在查询mysql语句时经常会出现查询速度极其缓慢
  • 如何实现响应式(自适应)网页

    响应式网页 什么是响应式布局 为什么会造成布局混乱 META标签 相对度量 FLEX布局 宽高设置 媒体查询 替换元素 响应式框架 什么是响应式布局 响应式网页 Responsive Web RW 又称自适应网页 是一种网页设计布局 可以根
  • IP地址相关知识点

    IP地址 IP地址 网络部分 主机部分 32位 网络部分用来确定终端是不是在同一个网段 主机部分用来确定终端的容量大小 这个网段可容纳多少台 同一个部门主机应该确保其在一个网段 主机数量应该在你的主机容量的范围内 IP地址分为5类 A B
  • ceph-cursh规则实战及PGS unknown 问题处理

    问题描述 root ceph mon01 ceph s cluster id 92d4f66b 94a6 4c40 8941 734f3c44eb4f health HEALTH ERR 1 filesystem is offline 1
  • FFT(快速傅里叶变换)中频率和实际频率的关系

    一 四个名词 实际物理频率 角频率 圆周频率 归一化频率 数字频率 模拟频率 1 实际物理频率表示AD采集物理信号的频率 fs为采样频率 由奈奎斯特采样定理可以知道 fs必须 信号最高频率的2倍才不会发生信号混叠 因此fs能采样到的信号最高
  • Windows系统使用Docker安装Mysql配置详情步骤

    1 开始到结束的全部命令 1 拉去镜像 docker pull mysql 8 0 2 查看镜像 docker images 3 安装容器 lower case table names 1防止大小写错误 命令 docker run itd
  • 超详细的js知识树状图~数组、函数、对象

    前言 学习任何新知识 最重要的永远都是搭建属于自己的知识框架 随后学习的细碎知识点往框架里面填入 最后形成一棵属于自己的知识大树 本系列的博客专注更新总结好的思维导图 希望可以帮助大家快速理清知识结构 注意 本系列文章是拿来建立知识体系 知
  • redis与mysql的区别

    1 在类型上 mysql是关系型数据库 而redis是缓存数据库 2 在作用上 mysql用于持久化的存储数据到硬盘 而redis用于存储使用较为频繁的数据到缓存中 内存 redis用于存储使用较为频繁的数据到缓存中 读取速度快 3 mys
  • 不要错过项目汇报的合理时间

    http blog vsharing com itdays A908850 html 原创 不要错过项目汇报的合理时间 今天想谈谈项目管理中经常要写的项目汇报的问题 项目汇报可以是给老板看的 也可以是给用户看的 不管给谁看的 报告的及时性是
  • 上海万得信息技术 2014笔试题 性格测试 武汉

    看清前面的A B C D哦 后面19题开始都是D C B A 把选好的写下 看哪个选的多 最终就偏向什么性格 比如A选的最多就是A性格 1 关于人生观 我的内心其实是 A 希望能够有尽量多的人生体验 所以会有非常多样化的想法 B在小心合理的
  • 使用DBeaver加载自定义连接驱动jar

    使用DBeaver加载自定义驱动jar 点击数据库 驱动管理器 新建
  • C++ Vector用法(带例程)

    介绍 vector是可变大小数组的序列容器 vector是连续存储的 与数组存储相同 区别是大小是动态改变的 可随机访问 因此vector访问速度快 vector在末尾删除添加元素时相对高效 若在其他任意位置添加删除元素则效率更低 使用 1
  • Window系统下如何生成ssh key以及如何在码云中添加公钥

    前言 本篇文章是以window系统和码云为例讲解如何在window系统下生成ssh key 然后在码云中添加公钥 然后可以远程仓库的ssh地址克隆远程git仓库代码 一 首先在window下生成ssh key 1 首先要在我们的电脑下安装g
  • 码字必备:18 款优秀的 Markdown 写作工具

    现在是 2015 年底 自 2004 年 John Gruber1创造 Markdown 语言以来 已经过去了 11 年 在这 11 年里 Markdown 语言从程序员圈子中逐渐扩散开来 成为了越来越多的电脑写作者第一选择 随着使用人群的
  • go-zero&go web集成redis实战

    前言 上一篇 go zero go web集成JWT和cobra命令行工具实战 从零开始基于go zero搭建go web项目实战 03集成redis实战 源码仓库地址 源码 https gitee com li zheng treasur
  • 请确保在bios菜单中启用了磁盘的控制器

    进入 BIOSS 然后看看 启动里面是不是把硬盘启动关了 是的话 打开就好了
  • 目标检测入门:帧差法,光流法和背景减法

    概述 运动目标检测是指当监控场景中有活动目标时 采用图像分割的方法从背景图像中提取出目标的运动区域 运动目标检测技术是智能视频分析的基础 因为目标跟踪 行为理解等视频分析算法都是针对目标区域的像素点进行的 目标检测的结果直接决定着智能视觉监
  • C语言-位段详解

    1 位段的定义 位段是定义结构体 或联合体 中的成员变量所占的空间 单位是bit 含有位段的结构体 联合体 称为位段结构 2 位段的意义 能够节省空间 比如性别 2个bit位可以表示2 2 4种可能性 不需要一个整形32个bit位 3 位段