一次测试 C 中的所有位字段

2023-12-11

假设我有一个 C 结构定义为

struct data {
    /* some memebers */

    int flag_a:1;
    int flag_b:1;
    int flag_c:1;

    /* some other members */
}

有没有办法利用位域在内存中表示为单个 int 并写入条件s.flag_a | s.flag_b | s.flag_c作为一个更简单的表达,例如s.flags?

或者像 GCC 这样的智能编译器能够真正推断出它吗?

Edit:为了让自己绝对清楚:我正在寻找一种便携式方法来测试所有设置的标志,而无需单独显式测试每个标志。


这不可能以任何确定性的方式可移植地完成。问题是 C 标准不保证这些位的任何内容:您无法知道哪一位是 LSB,也无法知道是否有填充。最重要的是,字节顺序也是一个问题。 (理论上,不同的符号格式。)详情请参阅此.

理论上,您可以在该位字段与以下位字段之间创建一个并集:: 3比特,但这种做法的结果将是不可预测的,也不是明确定义的。

最好的解决方案是摆脱位字段并用确定性的、100% 可移植的解决方案替换它:

typedef struct
{
  uint8_t flags;
} data_t

#define FLAG_A 0x01u
#define FLAG_B 0x02u
#define FLAG_C 0x04u
#define FLAG_ALL (FLAG_A | FLAG_B | FLAG_C)

data_t data = { .flags = FLAG_A | FLAG_B | FLAG_C};

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

一次测试 C 中的所有位字段 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 如何在同一浏览器上重新运行 Selenium 2.0 (webdriver) 测试?

    我正在尝试使用Selenium 2 0 Webdriver 来实现一系列测试 在运行这些测试之前 我必须登录应用程序 由于该应用程序不是我 自己的 测试 api 构建的功能 因此每个测试不应登录到我的应用程序来运行 我更愿意执行以下操作 将
  • Maven:打包时执行antrun任务

    我需要使用 Maven antrun 插件将 Hibernate 字节码检测添加到我的 Java 类之一 以便启用各个字段的延迟加载 但是 我无法让插件在构建周期中执行 如何指示 Maven 在编译之后 打包之前执行 antrun 插件mv
  • Mysql JOIN(多个)表

    我有3张桌子 其中 2 个是相同的 相同的列 不同的数据 第三个有一些关于其他 2 个的信息数据 数据库如下所示 Table 1 ID Name 1 Table 2 2 Table 3 Table 2 Name Temperature Pr
  • WCF 与实体框架错误

    错误 ObjectContext 实例已被释放 不能再用于需要连接的操作 我正在尝试使用实体框架 VS 2010 NET 4 创建 WCF 服务 当我运行它时 我收到上述错误 我读过一些有关编辑 T4 模板的内容 但似乎它已经有了 Data
  • PHP 正则表达式删除多个 ? 标记

    我无法找到正确的正则表达式字符串来删除多个 的序列 人物 我想替换多个连续的 用一个 但是要转义哪些字符 正在逃避我 输入示例 这东西还开着 或者是什么 期望的输出 这个东西开了吗 或者是什么 我在用着预替换 in PHP preg rep
  • 一些基本操作的 CPU 成本数量级

    回答后那么问题被否决了 我想和你核实一下 为了对我编写的代码的成本有一个初步的了解 我倾向于以这种方式扩展操作 堆分配比堆栈分配慢大约 1000 倍 与屏幕 输出的IO约为1000次 比堆分配慢 硬盘上的 IO 大约慢 1000 倍 与屏幕
  • 如何使用 Passport-google-oauth 成功身份验证后重定向到原始页面

    我正在使用节点 Passport google oauth 模块 并尝试使用基于会话的方法成功进行身份验证后将页面重定向回原始路径Node js Passport 的 Google 策略上的自定义 returnUrl 但是 我发现在回调中
  • PHP MYSQL 多维数组

    我在尝试从两个单独的 MySQL 选择创建多维数组时遇到了很大的麻烦 我一直在这里和谷歌搜索一整天 最后不得不承认失败并寻求一些帮助 我也是新手 这没有帮助 我有两个表 一个表包含每个 id 的单行结果 另一个表可以包含一个 id 的多行结
  • 如何确定git中最后合并的分支?

    我需要确定哪个是最后合并到 master 的分支 我一直在搜索 git 文档 但我仍然有点迷失 到目前为止我已经找到了命令 假设master是我当前的分支 git log oneline graph decorate 这为我提供了这样的输出
  • 如何进行合并?

    我有一个主分支和一个功能分支 feature 分支有一些更改 但 master 分支有很多更改 例如从存储库中删除了 10 个项目 问题是如何将feature分支合并回master分支 1 将feature与master合并 然后maste
  • 如何让ffmpeg根据设置的高度比例计算修改后的宽度?

    找到解决方案后 我的 Android 上所有 webm 到 MP4 编解码器转换错误的根源 我遇到了另一个问题 分解我的问题 大多数设备都支持哪些 MP4 分辨率 我知道它们从某个高度值开始经过 p 才能工作 例如 720p X720 有没
  • 从列表创建多个复选框并获取所有值

    我想从一个大列表中生成多个复选框 并获取所有值 这是到目前为止我的代码 列表可能更大 from Tkinter import def print ingredients args values cheese cheese get ham h
  • 如何在 python 中将多图像 TIFF 转换为 PDF?

    我想在 python 中将多图像 TIFF 转换为 PDF 我是这样写的代码 这段代码怎么行不通 我应该如何改变它 images img Image open multipage tif for i in range 4 try img s
  • PHP - 打印带有控制字符的字符串

    有没有办法让 PHP 输出一个带有 r n 和 n 的字符串作为实际文本而不是换行符 我看到一个有趣的问题 n 上的explode 无法在Windows 服务器上正常运行 编辑 r n 来自用户在输入文本区域时按 Enter 键 所以我没有
  • 安卓图片上传

    你好 我是 Android 开发新手 我想知道如何在 Android 中上传图像 我没有找到任何有用的教程 你能给我一些指导吗 请帮助我 我为你构建了这个小方法 private boolean handlePicture String fi
  • JSON 完成的自定义扩展在双引号中不起作用

    我正在开发一个 VSCode 扩展 它应该通过额外的代码完成来增强 JSON 编辑 因此我添加了四个虚拟建议 foo foo1 foo2 foo3 开始测试 当在 JSON 键后输入冒号时 它会按预期工作 此外 当我在空对象中触发完成时 它
  • Tensorflow v1.10:将图像存储为字节字符串或每个通道?

    Context 据了解 目前 TF 的 Record 文档还有一些不足之处 我的问题是关于什么是最佳存储 一个序列 它的每个元素类别概率 以及 一些 上下文 信息 例如序列的名称 作为 TF 记录 也就是说 这个问题考虑将序列和类概率存储为
  • karate.callSingle 在 karate-config.js 中找不到 .feature 文件

    我正在使用空手道 v0 9 6 它是一个很棒的工具 我有超过 1000 个场景 每个场景都需要令牌才能工作 因此我在 karate config js 中使用 callSingle 来创建和缓存令牌 我使用独立的 jar 文件 我的 kar
  • SFINAE 未编译[重复]

    这个问题在这里已经有答案了 我以前经常使用 SFINAE 但我有一个非常非常简单的示例 但今天无法运行 class X public template
  • 一次测试 C 中的所有位字段

    假设我有一个 C 结构定义为 struct data some memebers int flag a 1 int flag b 1 int flag c 1 some other members 有没有办法利用位域在内存中表示为单个 in