Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C结构中两个不同位置的位字段

C结构中两个不同位置的位字段
EN

Stack Overflow用户
提问于 2015-07-13 23:20:21
回答 1查看 690关注 0票数 0

在一个结构中,我们通常有一个连续的位字段;也就是说,一个接一个,彼此相邻,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct demo
{
  char a;
  char b:1;
  char c:2;
  char d:2;
  int  e;  
} demo1;

demo1的大小为8个字节:

  • size = a(1字节)+位字段(1字节)+间隙(2字节)+ e(4字节))

现在考虑以下结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct demo
{
  char a;
  int  b:1;
  char c;
  char d;
  int  e:2;
} demo1;

当我使用sizeof(demo1)时,它给了我8个字节,但我想知道这些位字段是如何在内存中显示的。

如果计算与上述结构尺寸相同,则应为:

  • size = a(1字节)+ b(4字节)+ c(1字节)+ d(1字节)+ e(4字节)

在编程过程中,我们不用担心如何使用sizeof计算大小,甚至不会在两个不同的位置使用位字段,但有时面试官会问这种类型的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 00:11:56

连续(非零宽度)位字段可以合并到单个内存位置,而位字段后面的非位字段是不同的内存位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 struct demo
 {
      char a;
      int b:1;
      char c;
      char d;
      int  e:2;
 } demo1;

所以在这个struct中,有一个非比特字段和一个比特字段,然后是两个非比特字段,最后是一个比特字段。

在位字段成员之后有一个非位字段(或零长度位字段),接下来将是一个不同的/独立的内存位置/对象。

还包括:

编译器不会重新排序struct的元素,因为这违反了C标准。C99标准第6.7.2.1节规定:

在一个结构对象中,非位field成员和位-fi屏蔽所在的单元具有按声明顺序增加的地址。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31400160

复制
相关文章
c语言程序个位,C语言位字段
位字段(bit-field)是一个由具有特定数量的位组成的整数变量。结构或联合的成员也可以是位字段。如果连续声明多个小的位字段,编译器会将它们合并成一个机器字(word)。这使得小单元信息具有更加紧凑的存储方式。当然,也可以使用位运算符来独立处理特定位,但是位字段允许我们利用名称来处理位,类似于结构或联合的成员。
IT工作者
2022/08/04
12.3K0
isa 指针中不同的位代表不同的含义
对象.isa -> 类.super -> 父类.super -> 根类.super -> nil
艳艳代码杂货店
2021/09/26
9420
C程序中的raise和kill两个函数有何不同?
在多线程程序中,进程给自己发SIGTERM信号退出,应当调用“kill(getpid(), SIGTERM)”,而不是“raise(SIGTERM)”。
一见
2020/02/13
1.6K0
简单的 C++ 结构体字段反射
本文不讨论完整的 C++ 反射技术,只讨论 结构体 (struct) 的 字段 (field) 反射,及其在序列化/反序列化代码生成上的应用。 正文开始于 § 静态反射 部分,其他部分都是铺垫,可以略读。 打包后的代码可以通过 archived.zip下载,每个 .cc 文件上都有对应的编译、运行脚本,或者可以通过 run_all.sh 脚本运行所有代码。 1. 背景 很多人喜欢把程序员称为 码农,程序员也经常嘲讽自己每天都在 搬砖。这时候,大家会想:能否构造出一些 更好的工具,代替我们做那些无意
腾讯技术工程官方号
2019/10/17
6.4K0
简单的 C++ 结构体字段反射
简单的 C++ 结构体字段反射
本文不讨论完整的C++反射技术,只讨论 结构体 (struct) 的 字段 (field) 反射,及其在序列化/反序列化代码生成上的应用。 正文开始于 § 静态反射 部分,其他部分都是铺垫,可以略读。 打包后的代码可以通过 archived.zip下载,每个 .cc 文件上都有对应的编译、运行脚本,或者可以通过 run_all.sh 脚本运行所有代码。 1. 背景 很多人喜欢把程序员称为 码农,程序员也经常嘲讽自己每天都在 搬砖。这时候,大家会想:能否构造出一些 更好的工具,代替我们做那些无意义的 体
腾讯大讲堂
2019/10/22
4.9K0
简单的 C++ 结构体字段反射
javascript在html中引入的不同位置的作用
ttt.png 一般: 知名的第三方依赖(如jQuery/AngularJS/Bootstrap),放在1——header里。(尤其在使用那些知名库的公库url后,在特定地域内加载速度有保证) 自写的纯逻辑代码(没有引用可见标签的),放在2——body标签的顶部 界面逻辑相关代码,放在3——确保被引用标签已经被浏览器创建存在。 加载固定内容的脚本,可以前置到文档头部。 浏览器的dom按读取到标签顺序解析并执行,所以脚本引用前置使其尽早加载,有加速效果(尤其浏览器首次打开网页,且网页内容较大或者网速不佳时
治电小白菜
2020/08/25
3.9K0
javascript在html中引入的不同位置的作用
C语言-结构体与位域
C语言里的结构体是可以包含不同数据类型和相同数据类型的一个有序集合,属于构造类型,可以自己任意组合,并且结构体里也可以使用结构体类型作为成员。
DS小龙哥
2022/01/07
5130
【Java入门】交换数组中两个元素的位置
在Java中,交换数组中的两个元素是基本的数组操作。下面我们将详细介绍如何实现这一操作,以及在实际应用中这种技术的重要性。
努力的阿飞
2023/09/14
3630
新增非空约束字段在不同版本中的演进
开发提了一个数据库变更需求,新增一字段,没有NOT NULL非空约束,但有默认值为NULL。看起来有些奇怪,因为若字段允许NULL,其默认值就是NULL,不用显示声明,可以创建一个无DEFAULT NULL的新增字段再查看desc表结构,就可以证明这点。
bisal
2019/01/29
3.1K0
FPGA开发中全局复位置位(GSR)简介
在数字系统设计中,我们传统上都认为,应该对所有的触发器设置一个主复位,这样将大大方便后续的测试工作。所以,在所有的程序中,我往往都在端口定义中使用同一个reset信号(其实好多时候根本就没有用到)。所以,当看到文档中提到,“不建议在FPGA设计中使用全局复位,或者说应该努力避免这种设计方式”时,许多设计人员(包括我)都会觉得非常难以理解,这种设计思想跟我们通常的认识是相冲突的! 继续读下去,不知不觉发现这个白皮书讲的还真是在理。接下来把我的个人理解讲述一下。
碎碎思
2021/02/26
1.1K0
C++中巧妙的位运算
位运算要多想到与预算和异或运算,并常常将两个数对应位上相同和不同分开处理 一、x&(x-1)消除x二进制中最右边的一个1。 这个比较厉害,比如统计某个 二、与和异或的巧妙结合的思想 与运算可以取出两个二进制数中都有1的部分,异或可以求出两个二进制数中只有一个有1的部分,所以运用位运算的时候可以将两个数用与和异或拆成两部分分别运算,然后在将结果合并。 1、(x&y)+((x^y)>>1)来求x、y的平均数 分析如下: 第一步:x,y对应位均为1,相加后再除以2还是原来的数,如两个00001111相加后除以2仍
用户1215536
2018/02/05
1.3K0
MySQL语法中位字段值知识学习--MySql语法
本文学习的是MySQL语法中位字段值知识,可以使用b'value'符号写位字段值。value是一个用0和1写成的二进制值。
用户1289394
2021/07/30
2.4K0
CNN 是如何处理图像中不同位置的对象的?
AI 研习社按:这篇博客来自 Jetpac(现被谷歌收购) CTO、苹果毕业生、TensorFlow 团队成员 Pete Warden。文中讨论了当要识别的对象出现在图像中的不同位置时,CNN 是如何应对、识别的。Pete Warden 给出的解释也许算不上完善,而且也仍然无法保证能够消除位置的影响,但这是一个不错的开始。AI 研习社全文编译如下。
AI研习社
2018/07/26
1.7K0
CNN 是如何处理图像中不同位置的对象的?
c-各变量在内存中的位置
关于变量分配的相关知识,笔者之前也看过,但是最近遇到了一个相关的题目,发现有些还是没有搞清楚,或者说是遗忘了一些,在此重新学习一下,顺便做一下相关的笔记,以下的一些知识是查看网络上面的一些文章总结而来。不了解的小伙伴可以学习一下,了解的小伙伴,欢迎发现错误并指正。
kdyonly
2023/03/03
4360
聊聊Batch Normalization在网络结构中的位置
谷歌在2015年就提出了Batch Normalization(BN),该方法对每个mini-batch都进行normalize,下图是BN的计算方式,会把mini-batch中的数据正规化到均值为0,标准差为1,同时还引入了两个可以学的参数,分别为scale和shift,让模型学习其适合的分布。
炼丹笔记
2021/06/15
3.7K0
聊聊Batch Normalization在网络结构中的位置
C++中的结构体
和C语言的结构体的不同之处 C中的结构体只能自定义数据类型,不允许有函数;但是C++的结构体中是可以加入成员函数的。 C++中的结构体和类的不同 (1)相同之处 结构体像类一样,可以包含函数;也可以定义public、private、protected数据成员;定义结构体后,可以用结构体来创建对象。 C++中的结构体可以继承其他类,也可以被其他类继承,还可以有虚函数。 (2)不同之处 结构体中默认情况下的成员是public,类定义中的默认情况下的成员是private的。 类中的非stat
青木
2018/05/28
1.2K0
linux环境中,两个不同网段的机器互通
host2 双网卡 eth0 172.24.100.14/16   eth1 192.168.122.214/24
用户1685462
2021/07/27
2.9K0
C++ 中不同的换行输出的区别
除了都是输出一个换行,两者唯一的区别是,std::endl 可以刷新输出缓冲区,而 \n 不会。说白了就是下面的代码,
ClearSeve
2022/02/11
1.3K0
干货 | CNN 是如何处理图像中不同位置的对象的?
AI 科技评论按:这篇博客来自 Jetpac(现被谷歌收购) CTO、苹果毕业生、TensorFlow 团队成员 Pete Warden。文中讨论了当要识别的对象出现在图像中的不同位置时,CNN 是如何应对、识别的。Pete Warden 给出的解释也许算不上完善,而且也仍然无法保证能够消除位置的影响,但这是一个不错的开始。AI 科技评论全文编译如下。
AI科技评论
2018/07/27
1.8K0
干货 | CNN 是如何处理图像中不同位置的对象的?
点击加载更多

相似问题

位字段在结构中的位置

23

C中的结构位字段

118

C中结构的位字段提取

22

结构中的C编程位字段

20

在C中位字段结构中添加额外的位

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文