C 中的位域,其结构包含结构体的并集

2023-12-28

嗯...为什么我打印的时候会这样sizeof(struct MyStruct),该代码输出 3(而不是 2)?

#pragma pack(push, 1)
    struct MyStruct
    {
        unsigned char a : 6;
        union
        {
            struct
            {
                unsigned int b : 9;
            };
        };
    };
#pragma pack(pop)

万一重要的话,我在 Windows 7 x64 上运行 MinGW GCC 4.5.0,但老实说,结果对我来说很奇怪,我认为编译器和操作系统在这里并不重要。 :\


字段不能从非字节对齐的地址开始。 你期待的是:

6 bits + 9 bits -> 15 bits -> 2 bytes

但你得到的是:

6 bits -> 1 byte
9 bits -> 2 bytes
total ->  3 bytes

数据存储为:

| 1 byte | 2 byte |3 byte | 
 aaaaaaXX bbbbbbbb bXXXXX  

当你期待:

| 1 byte | 2 byte |
 aaaaaabb bbbbbbbX  

编辑: 根据以下评论进行澄清:

联合(和包含的结构)必须是字节对齐的。内容只有 9 位并不重要,union/struct 本身就是完整的 16 位。请注意,您不能执行以下操作:

struct MyStruct
{
    unsigned char a : 6;
    union
    {
        struct
        {
            unsigned int b : 9;
        } c:9;
    } d:9;
};

因为 C 不允许您指定整个结构的位大小。

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

C 中的位域,其结构包含结构体的并集 的相关文章

随机推荐

  • 所有 .com 和 .net whois 服务器的列表?

    我正在尝试查找 COM NET 的所有 whois 服务器的列表 威瑞信是 com net name cc 和 tv 域的权威注册机构 可能的解决方案 要找出完整的 whois 服务器列表 需要使用 com 区域文件中的域列表爬取至少一百万
  • PDO 错误:SQLSTATE[HY000]:一般错误:2031

    我遇到了这个恼人的错误 尽管我知道为什么会出现这个错误 但我一生都找不到解决方案 if limit sth gt bindValue page page 1 PDO PARAM INT sth gt bindValue entries pe
  • grails 中的通用方法拦截(特别是控制器)

    我正在尝试在 grails 中创建一个通用函数 它允许我指定类和函数名称 并根据该条件拦截任何函数调用 getSomeClass metaClass invokeMethod String methodName args gt MetaMe
  • 元组对,使用 python 查找最小值

    我想找到按给定列排序的元组列表的最小值 例如 我有一些数据排列为二元组列表 data 1 7 57 2 2 1 3 1 2 4 2 1 5 0 01 6 0 5 7 0 2 8 0 6 如何通过仅比较元组中的第二个数字来找到数据集的最小值
  • 在最后一个选项卡上提交后如何将 primefaces 向导重定向到第一个选项卡

    我正在使用 primefaces 3 2 我已经准备好了向导 可以在数据表的同一页面上插入用户信息 向导逐个选项卡获取信息并在确认选项卡上提交 它还将反映在数据表的同一页面上 它运行良好 现在我需要更新多个用户 为此 我必须将向导从提交按钮
  • 如何通过 Azure 批处理和数据工厂使用 Azure Analysis Services 进行身份验证

    我有一个 c Sharp 类库 它使用 AMO 库连接到 Azure Analysis Services 我想将其用作数据工厂管道的一部分来刷新多维数据集分区 这是通过 Azure 批处理作为自定义 net 活动完成的 var server
  • 为什么恰好一次语义不可行?

    在 Erlang 希望最好的 RPC 语义中 SUN RPC 具有至少一次 Java RMI 具有最多一次 但没有人拥有恰好一次语义 为什么拥有一次语义似乎不可行 例如 如果客户端不断重新发送唯一标记的请求 直到收到答复 并且服务器会跟踪所
  • 如何在OSX下使用brew安装opencv2

    最近 我使用以下命令安装了opencv brew install opencv 我发现opencv3安装在目录中 usr include and usr lib 但我想要的是opencv2 如何安装opencv2brew命令 找到答案的最简
  • 编程中的削减有那么糟糕吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这学期我正在学习人工智能课程 其中我们学习 Prolog 我们的讲师告诉我们要尽量避免在作业中使用删减 但是 对于一些问题我似乎无法避免使用它们
  • Fgets 错误 段错误

    是否有任何原因导致较早编译的程序因 fgets 而在某个点出现段错误 我根本没有更改任何与之相关的代码 突然我相信它无法打开文件 但我像十五分钟前一样用该文件测试了它 我所做的只是添加了搜索功能 所以我不明白问题是什么 它可能是我通过 Pu
  • 在c#中将JSON列表解析为int数组

    我在将 JSON 数字列表读入 c int 数组时遇到问题 我已经尝试过 SO 的一些建议 但没有一个有效 我该如何使用 JSON net 来解决这个问题 从 JSON 文件中提取 course Norsk grades 6 3 5 6 2
  • Pandas 按组聚合排序

    我已经看过了这个问题 https stackoverflow com questions 14941366 pandas sort by group aggregate and column 但期望的结果与我的略有不同 想象一下这样分组的数
  • Visual Studio .net 2003 Web 组件上的 Asp.net 问题

    我想在 VS 2003 上运行 ASP NET 但它会引发一个错误 Visual Studio 检测到 Web 服务器正在运行 asp net 版本 1 0 您正在创建或打开的Web应用程序可以配置为与asp net 1 0兼容 但是 We
  • 如何在 gcc4.9 中设置 GCC_COLORS 来发出着色诊断消息?

    gcc4 https gcc gnu org gcc 4 9 changes html 9 支持编译器警告 错误消息的着色诊断 我们可以使用选项 为特定程序启用它 fdiagnostics color目前我正在使用 gcc4 9 1 并且我
  • 无法解析 jaxb-xjc-2.2.5-2.jar 中的名称“xjc:globalJavaType”

    Maven项目 转移到另一台PC后出现错误 为什么 INFO jaxb2 generate execution default cli INFO ERROR FATAL ERROR INFO INFO org xml sax SAXPars
  • Databricks:SQL 查询的等效代码

    我正在寻找查询的等效数据块代码 我添加了一些示例代码和预期的代码 但特别是我正在 Databricks 中寻找等效的代码query 目前我陷入了 交叉应用字符串分割 部分 SQL 数据示例 CREATE TABLE FactTurnover
  • Playframework 2 - 为任何操作设置会话变量

    我需要所有请求的调用方法 我尝试过 object Global extends GlobalSettings override def onRouteRequest request RequestHeader Option Handler
  • Golang http客户端握手失败

    尝试获取网页 tr http Transport TLSHandshakeTimeout 30 time Second DisableKeepAlives true client http Client Transport tr req e
  • 具有通用类型参数的活动的 espresso ActivityTestRule

    我已经宣布了这样的活动 class QuestionnaireActivity
  • C 中的位域,其结构包含结构体的并集

    嗯 为什么我打印的时候会这样sizeof struct MyStruct 该代码输出 3 而不是 2 pragma pack push 1 struct MyStruct unsigned char a 6 union struct uns