按位运算。该代码安全且可移植吗?

2024-02-15

我需要计算表示为的位集之间的汉明距离char数组。这是一个核心操作,因此必须尽可能快。我有这样的事情:

const int N = 32; // 32 always

// returns the number of bits that are ones in a char
int countOnes_uchar8(unsigned char v);

// pa and pb point to arrays of N items
int hamming(const unsigned char *pa, const unsigned char *pb)
{
  int ret = 0;
  for(int i = 0; i < N; ++i, ++pa, ++pb)
  {
    ret += countOnes_uchar8(*pa ^ *pb);
  }
  return ret;
}

分析后,我注意到在ints 更快,所以我写道:

const int N = 32; // 32 always

// returns the number of bits that are ones in a int of 32 bits
int countOnes_int32(unsigned int v);

// pa and pb point to arrays of N items
int hamming(const unsigned char *pa, const unsigned char *pb)
{
  const unsigned int *qa = reinterpret_cast<const unsigned int*>(pa);
  const unsigned int *qb = reinterpret_cast<const unsigned int*>(pb);

  int ret = 0;
  for(int i = 0; i < N / sizeof(unsigned int); ++i, ++qa, ++qb)
  {
    ret += countOnes_int32(*qa ^ *qb);
  }
  return ret;
}

问题

1)是从unsigned char * to unsigned int * safe?

2) 我在 32 位机器上工作,但我希望代码在 64 位机器上工作。做sizeof(unsigned int)在两台机器上返回 4,还是在 64 位机器上返回 8?

3) If sizeof(unsigned int)在 64 位机器中返回 4,我如何能够在 64 位类型上进行操作,long long?


这是从unsigned char * to unsigned int * safe?

形式上,它给出了未定义的行为。实际上,它几乎可以在任何平台上运行if指针适当对齐unsigned int。在某些平台上,如果对齐错误,它可能会失败或性能不佳。

Does sizeof(unsigned int)在两台机器上返回 4,还是在 64 位机器上返回 8?

这取决于。有些平台有 64 位int,有些是 32 位的。使用可能会有意义uint64_t与平台无关;在 32 位平台上,您可以有效地展开循环(每次迭代处理两个 32 位值),这可能会带来一定的改进。

我怎样才能在 64 位类型上运行long long?

uint64_t,如果您有 C++11 或 C99 库。long long至少为 64 位,但在 2011 年之前的实现中可能不存在。

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

按位运算。该代码安全且可移植吗? 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何在Xamarin中删除ViewTreeObserver?

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

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

    我想在 a 上使用 lambda 表达式IEnumerable
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 如何通过celery任务访问orm?

    我正在尝试使用 sqlalchemy celerybeats 翻转数据库中特定类型对象的布尔标志 但是如何从tasks py 文件访问我的orm from models import Book from celery decorators
  • JavaScript:将节点复制到 DocumentFragment

    我认为 DocumentFragment 的全部要点是能够在不接触 DOM 的情况下构造内容 直到它准备好为止 鉴于 DocumentFragment 不支持innerHTML 这可能有点乏味 另一方面 一旦构建完成 就可以很容易地通过片段
  • Ionic - 在 IOS 上,Stripe 支付按钮被键盘隐藏

    我的应用程序与 Stripe 集成用于支付目的 但我在 IOS 上遇到问题 人们无法支付 支付按钮悬停在键盘上方 没有像 Android 上那样的关闭按钮 我也无法成功地使弹出窗口滚动 我在用着定制集成 https stripe com d
  • 使用 pm2 以 root 身份启动应用程序

    我有一个守护进程 必须在启动时以 root 身份运行 我使用 pm2 启动其他应用程序 但无法确定它是否可以以 root 身份启动应用程序 能做到吗 如果没有 我有什么选择 我遇到了问题sudo pm2 start api 但这是因为 pm
  • 使用 docker for mac 在 docker 容器中公开 TTY 设备

    我正在尝试将插入我的 mac 的 Arduino 暴露给我正在运行的 Linux 实例适用于 Mac 的 Docker https docker github io docker for mac 没有虚拟机 Arduino 将自己暴露为 d
  • 为什么 SendKey Enter 无法在 Chrome 浏览器中使用

    我正在尝试检查在 Chrome 浏览器中输入 Excel 的几个 vin 此代码将打开浏览器并输入它们 但不会按 Enter 键来单击按钮 不知道我做错了什么 但我尝试了几种变体 但似乎想不出任何办法 抱歉 如果我的格式很糟糕 这是我第一次
  • Python 中的 {:02d} 是什么意思

    很难找到有关的信息 在线的 我看到下面的一些代码 def dateformat date day month year date split return 4d 02d 02d format int year int month int d
  • 如何让 Flask-SQLAlchemy 与应用程序工厂模式一起使用

    我想使用 Flask SQLAlchemy 设置一个 sqlite 数据库 我收到操作错误 sqlite3 OperationalError no such table 这是一个用 Flask 编写的 Web 应用程序 我想使用 Flask
  • 验证 GWT 组件需要很长时间

    在 Eclipse 中验证 GWT 组件过程需要很长时间 几乎不可能完成富有成效的工作 我已经从我的Eclipse gt Window gt Preferences gt Validators 已选择Supend all validator
  • 了解谷歌人工智能平台自定义预测例程的输入

    我正在关注this https cloud google com ml engine docs tensorflow custom prediction routines有关自定义预测例程的文档 我试图了解自定义预测例程的输入是什么样的 发
  • 使用 R,如何计算 PDF 文件中的页数?

    我的目录中有大约一百个长 PDF 文件 想知道 R 是否可以计算每个文件中有多少页 我的操作系统是Windows 8 以下是 10 页 PDF 文件的链接 以帮助您测试解决方案 MWE pdf 文件 https www pdf tools
  • 如何避免 iOS 二进制文件中的符号和源路径?

    当我编译release我的 iOS 应用程序版本 基于 Apple 提供的标准 iOS 应用程序模板 查看生成的可执行二进制文件 我看到了各种符号 甚至是本地 cpp 源代码和标头路径 我真的很困惑为什么会这样 我还没有启用 RTTI 尤其
  • Android Instrumentation 测试永远陷入“运行测试” Android Studio

    我将 Android Espresso 测试与最新的 Android Studio 2 1 2 一起使用 测试运行正常 但独立测试应用程序似乎没有返回结果以反映回 Android Studio 并且它显示永远运行测试 我意识到这是一个老问题
  • 将 div 定位到其包含的 div 的右侧

    I know this question will sound very basic but i just am not able to fix it I have got a div container and im trying to
  • 如何在PostgreSQL中使用jsonPath修改字段?

    如何在 PostgreSQL 中使用 jsonPath 修改字段 如 SQL Server JSON MODIFY https learn microsoft com en us sql t sql functions json modif
  • Android AVD - AVD 的模拟器进程已终止

    我在 StackOverflow 上进行了搜索 发现了许多类似的问题和许多不同的答案 但没有一个对我有用 所以 最后几天我一直很好地使用 Android Studio 的模拟器 直到我尝试添加一个新的虚拟设备谷歌播放API 当我尝试运行它时
  • Visual Studio 中大型解决方案中最喜欢的项目

    如果有人问这个问题 我深表歉意 我找不到比赛 我有一个解决方案 96 个项目 我一次和 3 4 个人一起工作 有没有办法过滤掉 标记为收藏等我当前感兴趣的项目 由于项目是按字母顺序排序的 而且我的一个项目从 B 开始 另一个从 T 开始 所
  • 如何在浏览页面时在浏览器地址栏中添加图片?

    复制 网站 URL 旁边的图像图标 https stackoverflow com questions 120420 image icon beside the site url 当前让网站图标在所有支持网站图标的浏览器中显示的最佳方法是什
  • ASP.NET Core 存储过程无法在循环中工作

    我想使用存储过程进行数据库查询 它适用于单个查询 但在循环中 它像第一个循环迭代一样执行 var getAutoResults new List
  • 按位运算。该代码安全且可移植吗?

    我需要计算表示为的位集之间的汉明距离char数组 这是一个核心操作 因此必须尽可能快 我有这样的事情 const int N 32 32 always returns the number of bits that are ones in