在 C++ 中使用布尔值按位运算符

2023-12-14

在 C++ 中是否有任何理由不使用按位运算符 &、| 和 ^ 来表示“bool”值?

有时我会遇到这样的情况:我希望两个条件之一恰好为真(XOR),所以我只是将 ^ 运算符放入条件表达式中。有时我还希望对条件的所有部分进行评估,无论结果是否为真(而不是短路),因此我使用 & 和 |。有时我还需要积累布尔值,&=和|=可能非常有用。

当我这样做时,有些人感到惊讶,但代码仍然比其他方式更有意义和更清晰。有什么理由不将它们用于布尔值吗?是否有任何现代编译器会给出不好的结果?


|| and &&是布尔运算符,内置运算符保证返回true or false。没有其他的。

|, & and ^是按位运算符。当您操作的数字域只是 1 和 0 时,它们是完全相同的,但如果您的布尔值不严格是 1 和 0(如 C 语言的情况),您可能会出现一些行为你不想要。例如:

BOOL two = 2;
BOOL one = 1;
BOOL and = two & one;   //and = 0
BOOL cand = two && one; //cand = 1

然而,在 C++ 中,bool类型保证只能是true or a false(分别隐式转换为1 and 0),因此从这种立场来看,不必担心,但人们不习惯在代码中看到此类内容,这一事实为不这样做提供了一个很好的理由。说啊b = b && x并完成它。

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

在 C++ 中使用布尔值按位运算符 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 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
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

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

随机推荐

  • 使用 Gnome 库 (GDK) 获取键盘修饰符状态仅获取初始状态

    我正在尝试通过 gnome GDK 或 GTK 库获取当前的键盘修饰符状态 目的是实现显示该状态的可访问性 gnome shell 扩展 我知道如何使用 xlib 获取其状态 但 gnome gjs 没有完全绑定 下面的代码仅获取初始状态
  • Powershell 脚本根据修改日期复制文件以从远程位置检查最新文件

    我是 powershell 脚本编写的新手 我不明白为什么我的脚本会复制 所有文件 似乎没有检查日期 然后复制所有文件 反正 我也尝试过几天和几分钟 但我不太确定 关于如何做到这一点 任何帮助都会很棒 see my script below
  • Python 类与另一个类在同一文件中定义 - 如何访问文件中稍后定义的类?

    我对Python很陌生 我认为这个问题应该很容易回答 我的问题简化了是这样的 我在文件类 A 和类 B 中有 2 个类 类 A 在文件中首先定义 类 B 在第二个定义 class A class B 如何通过 A 类访问 B 类 class
  • 如何检索列表框中所选项目的选定值?

    我正在 WinForms 应用程序中填充列表框 如下所示 listBoxUsers DataSource ctx Users ToList listBoxUsers DisplayMember Name listBoxUsers Value
  • 检查表中是否包含列表中的值

    我有一个字符串参数列表 我想编写一个查询 返回一个字符串列表 其中包含表中存在的参数列表的值 我有以下查询 但无法获取 where 子句 List
  • 我如何在 Slick2D/LWJGL 或一般游戏编程中使用“delta”?

    我所知道的是 增量在某种程度上与适应不同的帧速率有关 但我不确定它到底代表什么以及如何在计算速度和不计算速度的数学中使用它 Delta 在哪里声明 初始化 它是如何使用的 它的值 最小值 最大值 是如何设置的 它是帧之间的毫秒数 您不想尝试
  • 如何检测 tcp 客户端与 gen_tcp 的断开连接?

    我正在尝试使用 gen tcp 模块 有服务器端代码的示例 我遇到了麻烦 First I bind server port and wait for peer connection ok Sock gen tcp listen 7890 a
  • 有没有办法防止空值被保留,同时允许其他值通过?

    我有一个现有的 JPA EclipseLink 项目 其中所需的行为是 如果在实体的字段中给出空值 则不应保留该空值 用例是我们可以从外部来源获得这些实体的一些部分更新 这些来源可能会给我们一个空值 这并不意味着 使该字段无效 而是意味着
  • Android Espresso 测试应用流程

    我使用 Espresso 来测试很多活动以及它们之间的转换 我想为这些活动编写不同的测试 并将活动意图链接到相应的测试用例 1 活动 A testActivityA 运行 2 应调用活动启动器活动B testActivity B 是否可以使
  • 如何设置禁用 DIV 元素的样式

    我可以让输入元素响应 hover and hover disable 但看起来 div 的反应不一样 btn width 99px border color 2px 787878 background color CACACA margin
  • 如何对部署在 Tomcat 上的 Jersey Web 应用程序进行单元测试?

    我正在构建部署在 Tomcat 上的 Jersey Web 应用程序 我很难理解如何对应用程序进行单元测试 通过简单地实例化我的测试中的类并调用它们的方法 这与 Jersey 或 Tomcat 无关 可以测试核心业务逻辑 非 Jersey
  • 在不同函数中使用字符串名称

    我需要使用movies list从第二个函数中的第一个函数开始 我怎么做 def movie movies list movie strip for movie in movies list movie explorer def rand
  • laravel 4 雄辩的热切加载关系计数

    我有一个具有多个定义关系的复杂模型 在这个例子中我想计算Like模型并创建一个名为likes因此它可以从 REST 服务返回 是否可以将模型计数加载到动态属性中 beat Post with array user likes gt func
  • 如何将字体与我的 .net winforms 应用程序捆绑在一起?

    我想为我的 net 3 0 Winforms 应用程序使用非标准字体 该字体可能安装在我的某些用户的计算机上 但在其他一些计算机上显然会丢失 如何将字体与我的程序一起发送 我需要安装字体吗 如果是这样 缺乏管理员权限会成为问题吗 您必须使用
  • html标签“/href”和navlink或Link之间的区别

    html标签 href 和react router提供的用于导航页面的navlink有什么区别 我可以使用两者来将页面导航到不同的 URL 那么为什么需要引入 Navlink 或 Link The href属性将触发页面刷新 从而重置应用程
  • Yii2 Pjax 和 ActiveForm beforeSubmit 重新加载后不起作用?

    我正在提交按钮上创建一个加载指示器 并使用 registerJs 函数将 开始 过程附加到 beforeSubmit 事件 第一次它可以正常工作 但是在重新加载 Pjax 容器后 再次提交表单时该事件将不会触发 我将整个视图文件包含在 Pj
  • C++ 极小极大函数

    我已经在 Google 和 Stackoverflow 上搜索了这个问题 但我仍然不明白 minimax 函数是如何工作的 我发现维基百科条目有该函数的伪代码版本 function integer minimax node depth if
  • 需要 ext-mongodb ^1.5.0 symfony

    我安装了 ext mongodb php ri mongodb php ri mongodb grep 版本 MongoDB extension version gt 1 5 1 libbson bundled version gt 1 1
  • Cassandra CQL - 将 system.local 表中的 release_version 列转换为 int

    我正在 cql 中编写一个查询 检查 Cassandra 的发行版本是否大于或等于 3 11 10 select from system local where release version gt 3 11 10 由于release ve
  • 在 C++ 中使用布尔值按位运算符

    在 C 中是否有任何理由不使用按位运算符 和 来表示 bool 值 有时我会遇到这样的情况 我希望两个条件之一恰好为真 XOR 所以我只是将 运算符放入条件表达式中 有时我还希望对条件的所有部分进行评估 无论结果是否为真 而不是短路 因此我