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

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(使用前将#替换为@)

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

随机推荐

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