比char类型小的变量——位段

目录

  • 开头
  • 1.什么是位段?
  • 2.位段的优缺点
    • 优点
    • 缺点
  • 3.位段的实际应用
    • ……
  • 结尾

开头

大家好,我叫这是我58。在今天,我们将要介绍一个既比char类型小,又只用于结构体的一种东西——位段。

1.什么是位段?

位段,就是一种比char类型小的变量,当然,你也可以说位段比long long类型小,但是,位段只能用于结构体,那如何在结构体里创建一个位段呢?其实,这就是位段的创建方法:

从这张图中,我们可以知道char是位段的类型,a是位段的名称,:是位段的创建不可缺少的内容,而最右边的5则是位段的大小:5bit,其中,位段的类型既可以是刚才提到的char类型,也可以是整型家族中的shortintlonglong longsigned intunsigned int等等类型,而位段的名称随便取,至于位段的大小,如果位段的类型为char,那么位段的大小就不应该大于8bit,否则就会报错,因为1byte == 8bit9bit不能塞到8bit里去,同理,如果位段的类型为int,那么位段的大小就不应该大于32bit,否则就也会报错,因为int == 4byte == 8bit35bit不能塞到32bit里去,当然,任何位段的大小都不能等于0,因为没有申请空间的位段不能使用,并且,任何位段的大小也不能小于0,因为内存永远不是负数。那位段是怎么存储在结构体的呢?其实可以看一下下面的例子:

在这例子中(以VS为主,其他尚不确定),位段a开辟了一块int类型的大小的内存,占了int类型的3bit,位段b占了这个内存的5bit,位段c占了这个内存的10bit,位段b30bit则因为这个内存现在没有地方占了,则又开辟了一块int类型的大小的内存,并占了这个内存的30bit,而位段是怎么赋值的呢?从下面的例子就可以看出来:

从这之中,我们可以看到位段int a:3和位段int b:5在赋值的时候发生了截断,而位段int c:10和位段int d:30的后面再赋值好之后还有很多的0呢。并且,我还给出了这两段内存的十六进制:B6E00000A3000000,这两段内存的十六进制真的是这样的吗?我们调试一下,看!还真是这样:。在看到这里之后,我们就基本的讲完了位段的介绍了,接下来,就要讲一下位段的优缺点了。

2.位段的优缺点

1

优点

  • 节省空间

缺点

  • 位段不跨平台
  • 位段涉及很多不确定因素
    • 类型为int的位段被当成有符号数还是无符号数是不确定的
    • 位段中最大位的数目不能确定(16位机器最大16 , 32位机器最大32 ,写成27,在16位机器就会出问题)
    • 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义
    • 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是 舍弃剩余的位还是利用,这是不确定的

3.位段的实际应用

1

……

结尾

总的来说,位段可以在结构体中节省空间,但是位段也具有不跨平台涉及很多不确定因素这两个不良的特点,因此,注重可移植的程序应该避免使用位段。1


  1. 选自薄荷冰ovo的博客——《5分钟带你了解位段》 ↩︎ ↩︎ ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结

目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖? 9、…

考研数学想考120,把李林880做到准确率80%以上够吗?

考研数学想考120,把880题做到正确率80%以上是不够的 因为最近几年的考研数学变化,很大,传统的背题型的备考方式已经没用了,而880题是这种模式的佼佼者,25版的880变动又很小,只加了40道比较综合的题目在每一…

前端 JavaScript 的 _ 语法是个什么鬼?

前言 我们有时候会看这样的前端代码: const doubled _.map(numbers, function(num) { return num * 2; });刚接触前端的童鞋可能会有点惊奇,不知道这个 _ 是什么语法,为什么这么神通广大? 其实 _ 是 Lodash 或 Underscore.js …

推荐浏览器爬虫插件:Instant Data Scraper 无需写一行代码

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

24暑假算法刷题 | Day30 | 贪心算法 IV | LeetCode 452. 用最少数量的箭引爆气球,435. 无重叠区间,763. 划分字母区间

目录 452. 用最少数量的箭引爆气球题目描述题解 435. 无重叠区间题目描述题解 763. 划分字母区间题目描述题解 452. 用最少数量的箭引爆气球 点此跳转题目链接 题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中…

传知代码-CENet及多模态情感计算实战(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 一、概述 本文对 “Cross-Modal Enhancement Network for Multimodal Sentiment Analysis” 论文进行讲解和手把手复现教学,解决当下热门的多模态情感计算问题,并展示在MOSI和MOSEI两个数…

拒绝内卷:利用4P营销理论打造汇报PPT

在当下的职场文化里,越来越激烈的“内卷”现象普遍存在。随着不得已的竞争压力、加班文化、以及技能和学历的通货膨胀,越来越多职场人不惜加大工作负荷和劳动投入。但这种过度的付出往往并未带来成比例的回报,有时还会因为过度工作而导致生产…

C程序设计——基本变量类型(指针1)

注释 我们先介绍一下程序设计语言中,很重要的一个部分——注释。注释通常用来说明源码的功能、作者、版权等。目前常见的C编译器,都支持两种注释,多行注释和单行注释。 多行注释 多行注释是 /* 和 */ 中间的内容,比如下面这样&…

1.微服务发展阶段

单体应用阶段 简介 系统业务量很小的时候我们把所有的代码都放在一个项目中,然后将这个项目部署在一台服务器上,整个项目所有的服务都由这台服务器去提供 优点 1.展现层、控制层、持久层全都在一个应用里面,调用方便、快速,单个请…

域名的常见解析记录类型有哪些,你了解多少?

域名的常见解析记录类型有哪些?域名解析记录用于存储有关域名及其关联 IP 地址的信息。一般,常见的记录有多种,每种类型都有其特定用途。在本文中,我们将探讨常见的几种域名解析记录类型,方便您了解。 A 记录:将域名映…

Python酷库之旅-第三方库Pandas(081)

目录 一、用法精讲 336、pandas.Series.str.rpartition方法 336-1、语法 336-2、参数 336-3、功能 336-4、返回值 336-5、说明 336-6、用法 336-6-1、数据准备 336-6-2、代码示例 336-6-3、结果输出 337、pandas.Series.str.slice方法 337-1、语法 337-2、参数 …

一文掌握SOP搭建步骤方法

如果你正在阅读这篇文章,那么你很可能在寻找如何为你的企业编写标准操作程序(SOP)的指导,以确保更好的流程被传达给你的团队并且得到遵循。 为什么SOPs很重要 SOPs必须清晰地传达你的业务流程,以标准化操作并确保盈利性…

this内存原理,成员变量和局部变量的区别

this的作用:区分局部变量和成员变量 this的本质:所在方法调用者的地址值 内存分布,this会保存地址 this.name name 等号的右边触发就近原则接收形参 把接收到的形参赋值给成员变量的name 成员变量,类方法外的变量&#xff0c…

使用克隆软件克隆Windows 10 硬盘

为什么 Windows 用户要克隆硬盘驱动器 您打算将旧硬盘升级为新硬盘吗?是否可以将操作系统迁移到 SSD?如何制作硬盘的相同副本?如何安全地升级操作系统而不会出现可启动故障问题?是否有任何安全便捷的方法可用于传输数据并升级到更…

SQL— DDL语句学习【后端 10】

SQL— DDL语句学习 在数据管理的广阔领域中,SQL(Structured Query Language)作为操作关系型数据库的编程语言,扮演着举足轻重的角色。它不仅定义了操作所有关系型数据库的统一标准,还为我们提供了强大的工具来管理、查…

机器人阻抗控制之设计方法

机器人阻抗控制的设计方法主要围绕调整机器人与环境之间的动态关系,使其等效为由弹簧-阻尼-质量组成的二阶系统。这一控制策略不是直接控制机器人的运动或其与外界的接触力,而是控制这二者之间的动态关系。以下是机器人阻抗控制设计方法的详细阐述&#…

Docker最佳实践进阶(二):Docker Compose容器编排

大家好,在上篇文章中博主演示了Dockerfile常用的命令,以及如何利用Dockerfile构建镜像,生成容器服务,但是在实际应用环境中,特别是在微服务架构中,一个应用系统可能包含多个微服务,每个微服务可…

【vue】h 函数的使用

文章目录 1. 引言2. h 函数3. h 函数的使用3.1 v-if3.2 v-for3.3 v-on3.4 组件3.5 渲染插槽 4. h函数的使用场景参考链接 1. 引言 在绝大多数情况下,Vue 推荐使用模板语法来创建应用。然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。…

Java开发代码规范文档

优质博文:IT-BLOG-CN 一、命令规范 包命名规范 包Package的作用是将功能相似或相关的类或者接口进行分组管理,便于类的定位和查找,同时也可以使用包来避免类名的冲突和访问控制,使代码更容易维护。通常,包命使用小写…

安卓中Room持久化库的使用

在Android开发中,Room是Google提供的一个持久化库,旨在为应用提供SQLite的抽象层,以简化数据库的访问和操作。相比直接使用SQLite,Room提供更清晰、更简洁的数据库访问机制。 1. Room的基础知识 1.1 引入Room依赖 首先&#xff…