在 C 中从布尔值设置位掩码的快速方法

2023-11-29

执行检查并设置/清除标志是很常见的,例如:

if (some_test) {
   flag |= SOME_FLAG;
}
else {
   flag &= ~SOME_FLAG;
}

到目前为止我发现的一个方便的方法是......

flag = (some_test) ? (flag | SOME_FLAG) : (flag & ~SOME_FLAG);

这个可以做成宏就可以了,但是有没有一些有点花哨避免两次引用标志的魔法?

(如果有多个实例flag导致开销).

我正在寻找的示例(如果 C 可以对运算符进行三元运算)是......

flag ((some_test) ? (|=) : (&= ~) SOME_FLAG;

上面的例子只是为了描述我正在寻找的东西,当然它不会以当前的形式工作。


flag |= SOME_FLAG

是一个表达式,所以你可以使用宏

#define SET_FLAG(flag, some_test) \
    ((some_test) ? ((flag) |= SOME_FLAG) : ((flag) &= ~SOME_FLAG))

它评估flag只能使用一次,使用时需要输入flag只有一次。

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

在 C 中从布尔值设置位掩码的快速方法 的相关文章

随机推荐

  • 如何调试通过 UpdateListItems SOAP API 在 SharePoint 中创建列表项时出现的错误?

    我在调试 SharePoint SOAP 调用以创建列表项时遇到了非常困难的情况 我发送的 SOAP 主体是
  • Objective-C 错误“'XYZPerson' 没有可见的 @interface 声明选择器 'saySomething'

    我对 Objective C 确实很陌生 当我练习书本上的练习时 我真的被困在这里了 请帮助我解决这个问题 我已经思考了三个多小时可能导致此错误的原因 我还是没明白 此致 拉杰 提前致谢 main m import
  • Python 动态帮助和自动完成生成

    我想要的几乎都有了 这个动态对象封装了一个带有动态文档字符串生成的通用函数调用 def add docs tool def desc func func doc Showing help for s tool return func ret
  • 检测用户空闲(每个应用程序实例)

    我只需要在我的应用程序中进行用户空闲检测 每个 我的应用程序实例 我不能使用获取最后输入信息因为是特定于会话的用户输入 获取最后输入信息does not跨所有正在运行的会话提供系统范围的用户输入信息 相反 GetLastInputInfo
  • Convert Vuejs Typescript Options to Composition Api 中的奇怪问题

    问题已经解决 通读问题以了解如何逐步解决问题 我读到了有关组合 API 的内容 https vue composition api rfc netlify com api introduction 并尝试转换我现有的基于 vuejs 中 O
  • 当 Sphero 同步并且我使用多个 Activity 时如何保持蓝牙连接

    当我与 Sphero 同步并且想要从一个活动传递到另一个活动时 我的同步丢失了 我必须在新活动中执行 onCreate 中的此方法才能再次获得同步 RobotProvider provider RobotProvider getDefaul
  • 如何在 Java SE 环境上部署 JAX-RS 应用程序?

    我想使用 JAX RS 编写 RESTful Web 服务 并且想将其发布到本地主机上 例如http localhost port 我在这篇文章中读到了以下内容answer Java SE 7 JSR 336 和 Java SE 8 JSR
  • Python:检查异常引发的位置

    采取这个代码 def A try B except Exception pass def B C def C print exception handling pointer A 功能exception handling pointer应该
  • javascript确认函数确定和取消返回相同的结果

    在这里 我打电话confirm param1 param2 显示警报的方法Do you want to continue 在这种情况下 如果用户单击OK 它返回true 如果用户点击Cancel 它返回false 但是 当单击取消按钮时 它
  • Keras:使用 flow_from_directory 的 fit_generator 的多个输入

    fit generator 中是否可以有两个 flow from directory 例如 train generator 1 train datagen flow from directory train data dir 1 targe
  • 布尔运算符 ++ 和 --

    今天 在编写一些 Visual C 代码时 我遇到了一些令我惊讶的事情 看来 C 支持 bool 的 增量 但不支持 减量 这只是一个随机决定 还是背后有某种原因 这编译 static HMODULE hMod NULL static bo
  • Windows 批处理文件中的字符串处理:如何用前导零填充值?

    在 Windows cmd 批处理文件 bat 中 如何填充数值 以便将 0 99 范围内的给定值转换为 00 到 99 范围内的字符串 IE 我希望小于 10 的值有前导零 您可以使用一个两阶段的过程 REM initial setup
  • 日期时间到纪元的转换

    我有一个 bash 问题 使用 awk 时 我正在提取文本文件中第一列和第五列的每个实例 并使用以下代码将其通过管道传输到新文件 cut f4 test170201 rawtxt awk stream 0 print 1 5 gt test
  • bash 中的转义引号(嵌入式 awk)

    我有一个复杂的命令通过 ssh 传递到远程服务器 我正在尝试解压缩一个文件 然后在第二个 ssh 命令中更改其命名结构和扩展名 我的命令是 ssh root server1 gzip d tmp file out 20171119 gz e
  • 使用 PHP 通过 SSL 连接到 MySQL

    我正在编写第一个脚本 它将通过 SSL 连接到 MySQL 数据库 我已经阅读了大量有关该主题的文章 并且遇到了许多关于如何设置它的选项 有些适用于我的情况 有些则不适用 这是我的情况 MySQL 服务器与脚本位于同一台计算机上 我的 SS
  • d3.js 中的转换队列;逐个

    我尝试在 d3 js 中进行链式转换 为此 我在数组中定义了一组转换 并 尝试 创建一个函数来递归调用它们 each end function 在前一个完成时开始转换 但我还没有结果 行动清单 animations function con
  • 如何调试MEF异常?

    我们目前正在使用 MEF 托管扩展性框架 http mef codeplex com 并且它会抛出异常 而可供继续处理的信息有限 有没有办法调试 MEF 异常 我的例外是这样的 System Reflection ReflectionTyp
  • 绑定动态加载的fxml的宽度和高度

    目前 我在运行时动态加载 FXML 文件时遇到问题 一旦将它们添加到窗格中 它们就不会调整大小以使用该窗格的完整宽度和高度 我使用此方法在窗格中加载 FXML public void showContentPane String sURL
  • Facebook 连接对话框弹出窗口

    当使用 连接 facebook 连接按钮时 当我单击它时 它会在当前窗口之外打开一个新的弹出窗口 这很烦人 我如何才能使用大多数网站上的内联模式对话框 我附上了一个示例网站 看看您是否可以利用它来制作任何东西 http www gigloc
  • 在 C 中从布尔值设置位掩码的快速方法

    执行检查并设置 清除标志是很常见的 例如 if some test flag SOME FLAG else flag SOME FLAG 到目前为止我发现的一个方便的方法是 flag some test flag SOME FLAG fla