【C语言】位段

news2025/1/12 18:20:15

位段

一.简介

位段和结构体很相似。不同的是:

  1. 位段的成员:成员名 : 数字
  2. 且其成员必须是整型(char、int、unsigned int……)

示例:

struct S
{
    char a : 3;
    char b : 2;
    char c : 7;
};

S就是一个位段类型,其成员a为占3个比特位的char类型变量(即有效范围为000~111),相同的,b为占2个比特位的char类型变量,c为占7个比特位的char类型变量。

由此可见,位段的设计初衷就是为了节约空间的

二.不易移植性

不同平台下对于位段的处理不同,因此使用位段可能存在跨平台问题

  1. 位段的空间以1个字节1个字节(或4个字节4个字节)的方式开辟
  2. int类型的成员变量被当成有符号还是无符号数是不确定的
  3. 给变量所占(比特位)大小的数字范围不能确定,(比如在16位机器中,一个int占2个字节,如果是int a : 17的话就超出范围就会出错的)
  4. 位段的大小不确定:位段中成员在内存中从左向右或从右向左左分配;如果第二个成员需要的比特位空间大于上一个成员使用某个字节后的剩余空间,那么这些剩余空间是否被利用不确定。

三.内存分配

下面代码主要是为了展现不同编译器对于位段的处理,代码本身无实际意义(非位段使用场景示例)

1.在vs下测试

在这里插入图片描述

在这里插入图片描述

可以发现在vs下,对于位段S,是按4个字节4个字节开辟了8个字节的空间。

成员a的3个比特位空间分配在第1个字节并且按照从右向左(←)分配;

成员b的2个比特位空间被分配在第1个字节的剩余位且按照从右向左分配;

第1个字节剩余3个比特空间 < 成员c所需要的7个比特,舍弃剩余的3个比特空间,c的5个比特的空间被分配在第2个字节处;

对于int类型的成员d,其被分配在后4个字节处。

对位段成员进行赋值时,超出给位段的二进制数值会被舍弃


2. 在gcc下测试

在这里插入图片描述

在这里插入图片描述

可以发现在gcc下,位段S所占的空间更小,只有4个字节大小。

在gdb调试下,位段S的内存内存分配如上图。

所以在不同平台下,对位段的编译处理是不同的

🦀🦀观看~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【趣味学Python】Python基础语法讲解

目录 编码 标识符 python保留字 注释 实例(Python 3.0) 实例(Python 3.0) 行与缩进 实例(Python 3.0) 实例 多行语句 数字(Number)类型 字符串(String) 实例(Python 3.0) 空行 等待用户输入 实例(Python 3.0) 同一行显示多条语句 实例(Python 3.0) 多个语句构…

【Day02数据结构 空间复杂度】

最近太忙了都好久没有更新博客了,太难了,抽空水一篇文章,大佬们多多支持. 上篇:时间复杂度分析 目录 前言 一、空间复杂度概念&#xff1f; 二、实例展示 三、.有复杂度要求的算法题练习 1.题目链接&#xff1a;力扣--消失的数字 2.题目链接&#xff1a;力扣--旋转数组 总结: 1…

去课工场成都基地学Java,可行吗?

当然可行&#xff0c;不管是你选择自学Java&#xff0c;还是去培训机构学习都是非常不错的职业选择。选择好赛道能让你的未来收获更多。 2023年了&#xff0c;随着数字经济的发展&#xff0c;互联网已经渗入我们生活工作的方方面面&#xff0c;现在即使是吃个饭点个餐很多时候…

SpringBoot解决跨域方式

跨域是指在 Web 应用中&#xff0c;一个服务器资源或应用访问另一个服务器资源或应用的资源时候。由于浏览器的同源策略&#xff0c;一般情况下同一个域中的网站或应用可以互相访问资源&#xff0c;但跨域访问会被浏览器拒绝。浏览器出于安全考虑&#xff0c;会限制跨域访问&am…

深度学习领域的多任务学习综述

文章目录前言1. 什么是多任务学习&#xff1f;2. 为何要使用多任务学习&#xff1f;3. 多任务学习有哪些类型&#xff1f;3.1 基于硬参数共享的多任务学习3.2 基于软参数共享的多任务学习4. 为什么多任务学习能提升模型的性能&#xff1f;4.1 隐藏数据扩充&#xff08;Implicit…

关于sudo配置

前言这里做一个小补充&#xff0c;主要讲一下关于利用sudo对指令提权以及普通用户无法使用sudo指令的问题。在前面的文章【Linux】一文掌握Linux权限中&#xff0c;我们讲到了关于权限的一些问题。我们知道root身份下&#xff0c;一切畅通无阻&#xff0c;而权限只是用来限制我…

urp SpotLight 衰减方式扩展

背景&#xff1a; 解决默认spotLight 的衰减模式下&#xff0c; 在距离灯光特别近的时候&#xff0c;灯光过爆的情况 解决方法&#xff1a; 修改SpotLight的衰减方式 下图是unity给出的几种衰减模式以及图示&#xff1a; 其中InverseSquare是当前2021.2 unity版本中urp(12.1…

相恨见晚的办公插件神器,颠覆我们对辅助工具的认知

不坑盒子 这是一个非常好用的插件工具&#xff0c;专门应用在Word文档和wps&#xff0c;支持Office 2010以上的版本&#xff0c;操作也简单且实用。 不坑盒子下载及使用说明 一键排版功能 像是下面的自动排版功能&#xff0c;可以在配置里面先设定好需要的格式&#xff0c;…

结合java中的锁聊聊锁的本质

在操作系统里面&#xff0c;也会遇到什么信号量、互斥量&#xff0c;然后说利用互斥量、信号量可以实现锁的功能&#xff0c;而操作系统提供的原语有又mutex锁在学习数据库的时候&#xff0c;什么表锁、行锁、读锁、写锁、排它锁、意向锁、meta锁等等&#xff0c;各种各样的锁的…

mysql数据库limit的四种用法

文章目录前言一、语法二、参数说明三、常用示例-4种用法总结前言 mysql数据库中limit子句可以被用于强制select语句返回指定的记录数。limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数&#xff0c;第一个参数指定第一个返回记录行的偏移量&#xff0c…

实践数据湖iceberg 第四十一课 iceberg的实时性-业界的checkpoint配置

系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中&#xff0c;以sql方式从kafka读数据到iceberg 实践数据湖iceberg 第四课 在sqlclient中&#xff0c;以sql方式从kafka读数据到…

硬件系统工程师宝典(12)-----EMC应该知道的事

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到在做电源完整性分析时去耦电容要遵循的规则&#xff0c;大电容的去耦半径大&#xff0c;小电容的去耦半径小&#xff0c;电容焊盘扇出时…

2023年java春招面试题及答案

2023年java春招面试题1、下面有关jdbc statement的说法错误的是&#xff1f;2、下面有关JVM内存&#xff0c;说法错误的是&#xff1f;3、下面有关servlet service描述错误的是&#xff1f;4、下面有关servlet和cgi的描述&#xff0c;说法错误的是&#xff1f;5、下面有关SPRIN…

Radio Link Monitoring(RLM)

欢迎关注微信同步公众号“modem协议笔记”。 这篇看下radio link monitoring相关的内容&#xff0c;就是UE进行DL radio link quality监听的规定&#xff0c;这部分与RLF的判定息息相关。市面上讲NR相关的书籍&#xff0c;多少都会涉及这部分内容&#xff0c;可能spec上这块的…

pdf免费转换工具,只需记住这3款就够了

PDF格式的文档在人们的办公过程中扮演着非常重要的角色&#xff0c;而PDF格式的文档之所以受到人们的青睐&#xff0c;是因为它不容易被篡改&#xff0c;可以用多种阅读器打开浏览。然而&#xff0c;在实际的应用过程中&#xff0c;我们不仅需要阅读PDF文档&#xff0c;也经常还…

HTTP压力测试概论

常用的HTTP服务压测工具介绍 在项目正式上线之前&#xff0c;我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug&#xff0c;同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求&#xff0c;节约资源成本。 HTTP服务压力测试工具 在…

如何使用403bypasser绕过目标页面上的访问控制限制

关于403bypasser 403bypasser是一款自动化工具&#xff0c;该工具能够以自动化的形式实现针对目标页面的访问控制限制绕过技术。403bypasser项目目前仍处于积极开发阶段&#xff0c;并且还会增加新的功能。 该工具基于Python语言开发&#xff0c;因此具备良好的跨平台特性。 …

最好的 QML 教程,让你的代码飞起来!

想必大家都知道&#xff0c;亮哥一直深耕于 CSDN&#xff0c;坚持了好很多年&#xff0c;目前为止&#xff0c;原创已经 500 多篇了&#xff0c;一路走来相当不易。当然了&#xff0c;中间有段时间比较忙&#xff0c;没怎么更新。就拿 QML 来说&#xff0c;最早的一篇文章还是 …

基于云服务器的hexo博客搭建(稳)

文章目录序一、前置工具的准备域名购买及服务器购买二、搭建步骤1.配置服务器环境2.nginx 的配置4.git 及node.js安装1.安装node.js:2.安装Git及配置仓库1.安装git:5.本地主机配置&#xff08;这里winr &#xff0c;cmd&#xff0c;打开命令行操作&#xff09;1.安装node.js2.安…

c++11 标准模板(STL)(std::unordered_set)(十二)

定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…