位运算 (C++)

2024-04-27

最近面试时遇到一个问题——我被要求比较按位运算的性能。

比如,简单描述一下不同位操作的性能。

我想这个问题可能非常普遍并且非常特定于机器,但我也认为应该有一些关于这个的一般规则,你必须提到(我没有:)。

那么 - 你会回答什么?

我可能还应该说,比较它们在 C 中的性能可能是个好主意(或 C++,无论如何),因为我假设这些语言为编译器提供了更多空间来执行与位相关的优化。

谢谢。


好的,完整的问题背景。

面试有几个部分,有些确实是小菜一碟,有些则是一场噩梦。与位相关的部分有点困难,包括以下问题:

  • 浮点数规范,float, double

  • Fast float->int转换(如果你知道范围,甚至更快)

这些并不是很难,但作为与位相关的部分中的最后一个问题,我被要求枚举我所知道的位操作并比较它们的性能。

我回答了一些不太具有描述性的问题,比如“它是架构、编译器……特定的,实际上并不重要,按位已经是相当低级的了”,但我想这个答案很糟糕。


我想他们的意思是将位运算与算术等价物进行比较。

例如,“是a = (a>>1)比...快a = (a / 2)?"

在许多情况下,像这样的简单操作(由于各种原因,包括软件和硬件优化、流水线、缓存等)将有效地占用 1 个 CPU 周期,因此在现代处理器上,您不太可能看到差异 - 但如果它们在如果您通过多个 ALU 进行并行,那么如果您混合算术和按位运算,您仍然可以从更好地利用 CPU 并行路径中受益。如果您使用高级语言编写,那么编译器很可能会优化您的代码以使用更好的形式,因此无论您以哪种方式编写代码,您都会看到相同的性能!

但是,在某些情况下,按位运算可能比简单的算术/逻辑要快得多 - 例如,您可以通过一些按位运算(有效处理所有数据)对 32 位或 64 位值中的所有字节应用某些运算。字节同时),否则将需要大量循环和比较逻辑来增量执行。看here http://www.graphics.stanford.edu/~seander/bithacks.html一些可以实现的伟大例子。在这些情况下,通常可以获得显着的性能优势。 (尽管确切的增益很大程度上取决于您的目标 CPU)

(或者,他们可能只是意味着“移位操作比 XOR 更快”,在这种情况下,对于现代处理器,大多数情况下答案可能是“否” - 大多数按位操作很快。但这将是一个毫无意义的问题去问...)

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

位运算 (C++) 的相关文章

  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 哪些属性有助于运行时 .Net 性能?

    我正在寻找可用于通过向加载器 JIT 编译器或 ngen 提供提示来确保 Net 应用程序获得最佳运行时性能的属性 例如我们有可调试属性 http msdn microsoft com en us library k2wxda47 aspx
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • Ruby 脚本即服务

    嗯 标题说明了一切 我有一个 ruby 脚本 我想在我的 Linux 机器上作为一项服务 我可以启动和停止 运行 我找到了如何在 Windows 上执行此操作here https stackoverflow com questions 16
  • Dialogflow 不记名令牌分析

    如何获取 Dialogflow v2beta1 API 调用的不记名令牌 我想集成 Dialogflow API 所以现在我什至无法在没有不记名令牌的情况下在邮递员中测试 API 为了进行测试 我在 GCP 项目中为我的代理生成了 API
  • 打开页面时出现问题(许可协议页面)

    我很困扰 如何在使用应用程序时仅显示一次协议页面 我不知道如何解释这一点 但我正在尝试解释这一点 我正在创建一个应用程序 其中有协议页面 其中有两个按钮 1 按钮名称为Accept 2 按钮名称为拒绝 如果用户单击接受按钮应用程序进入下一页
  • DDMS 显示在线模拟器的空文件资源管理器

    我很多天都面临这个问题 我搜索了很多但没有找到任何方便的答案 每当我启动模拟器时 一段时间后 当我看到 DDMS 时 它会显示模拟器在线 但其文件资源管理器什么也不显示 当我再次重新启动模拟器或重新启动 Eclipse 时 它 会再次可见
  • 有完整的 tomcat 角色列表吗?

    我希望能够完全访问和控制 tomcat 以使我的开发生活变得简单 我知道角色 admin 和 manager 并且知道还有一些带有连字符的角色 例如 manager gui 但在哪里可以找到包含可用角色描述的完整列表 我什至无法在文档中找到
  • 使用 Python 从 PDF 中的物理坐标返回文本字符串

    在过去的几个小时里 我一直在与 Google 和 PDFMiner 的有限文档作斗争 虽然我感觉很接近 但我只是没有得到我需要的东西 我已经经历过http www unixuser org euske python pdfminer htt
  • 简单的 XML 加载文件不起作用

    为什么这不起作用 url http query yahooapis com v1 public yql q select 20 20from 20html 20where 20xpath 3D 22 2F 2Fmeta 22 20and 2
  • Docker nuget连接超时

    尝试利用官方jetbrains teamcity agentKubernetes 上的图像 我已经设法在 Docker 中运行 Docker 但尝试使用以下命令构建 ASP NET Core 映像docker build命令失败于dotne
  • SetLocale 无法在 jsp 站点中以德语格式化货币

    我对 jstl 标签库感到困惑 我想将数字格式化为德国风格的货币 但我尝试的一切都不起作用 我找到了以下示例 但输出是相同的
  • 如何根据 angular.js 中的子复选框选择父复选框?

    我最近一直在使用 Angular js 并决定在选中父复选框后检查所有复选框 我已经使用了ng model and ng checked指令 div div div div
  • Hibernate 本机查询:无效的列名错误 SQL-17006

    package com abc def model import javax persistence Column import javax persistence Id import javax persistence Entity im
  • 在Angular JS中通过ajax调用发送数组

    我使用以下代码将一些信息发送到我的 servlet 来处理数据 http method GET url http localhost 8080 purchase AddInfo data addArray sample success fu
  • “for_each”值取决于无法确定的资源属性(Terraform)

    我有一个 terraform 配置 需要 创建一个 lambda 调用 lambda 迭代 lambda 的 json 结果 返回一个数组并为数组中的每个条目创建一个 CloudWatch 事件规则 相关代码如下 Create lambda
  • PHP GD库用于合并两个图像

    好的 我的文件中有两个图像 其中一件是T恤 另一个是徽标 我使用 CSS 设计了这两个图像的样式 使其看起来像徽标写在 T 恤上 我只是在 CSS 样式表中为徽标图像赋予了更高的 z index 无论如何 我是否可以使用 GD 库生成衬衫图
  • 对 Angular 2 中提供的 @NgModule 感到困惑

    我正在尝试玩 Angular2 当我将基本代码升级到 Angular 2 0 0 RC5 时 我发现引入了一个重大更改 NgModule 它相当于角度模块 在 Angularjs 1 x 中 对我来说 ngModule 让事情变得复杂 当我
  • Jquery Validate:如何忽略占位符文本(默认/空白时产生错误)

    我想让 jquery 验证忽略默认文本 我检查默认文本的方法是检查 element value 元素 alt 文本 这是我的代码 但无论它是空白 默认文本还是任何其他文本 它都会返回无效 validator addMethod notDef
  • 点击Leaflet地图上的点即可在Shiny中生成ggplot

    我正在尝试使用 R 中的 Shiny 创建一个 Leaflet 地图 它允许用户单击任何标记来生成表示该特定站点的信息 温度 的相应图 我合并了这个问题的代码 单击传单地图中的点作为闪亮绘图的输入 https stackoverflow c
  • 主要:并非所有代码路径都会返回值

    我正在制作列表并想在控制台中查看它 我有一个错误 它说 Main 并非所有代码路径都会返回值 也许你可以帮助我 这是我的代码 namespace ConsoleApplication5 public class DocConfig publ
  • C# 控制台应用程序上的退出按钮 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 大家好 我敢打赌我真的很蠢 你能帮我消除这些错误吗 抱歉 我是一名刚刚学习 C 的学生 我需要声明任何变量来纠正逻辑吗 void Windo
  • 位运算 (C++)

    最近面试时遇到一个问题 我被要求比较按位运算的性能 比如 简单描述一下不同位操作的性能 我想这个问题可能非常普遍并且非常特定于机器 但我也认为应该有一些关于这个的一般规则 你必须提到 我没有 那么 你会回答什么 我可能还应该说 比较它们在