在 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 中从布尔值设置位掩码的快速方法 的相关文章

  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 如何调试通过 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