计算存储数字所需位数的最快方法是什么

2023-11-22

我正在尝试优化一些位打包和拆包例程。为了进行打包,我需要计算存储整数值所需的位数。这是当前的代码。

if (n == -1) return 32;
if (n == 0) return 1;
int r = 0;
while (n)
{
    ++r;
    n >>= 1;
}
return r;

不可移植的是,请使用大多数现代架构上可用的位扫描反向操作码。它被暴露为固有的在 Visual C++ 中。

可移植的是,问题中的代码不需要边缘情况处理。为什么需要一位来存储 0?无论如何,我都会忽略问题的边缘。胆量可以这样有效地完成:

if (n >> 16) { r += 16; n >>= 16; }
if (n >>  8) { r +=  8; n >>=  8; }
if (n >>  4) { r +=  4; n >>=  4; }
if (n >>  2) { r +=  2; n >>=  2; }
if (n - 1) ++r;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算存储数字所需位数的最快方法是什么 的相关文章

随机推荐

  • javascript中的第n个孩子

    这是我的 jquery 代码 我需要 javascript 代码来选择第 n 个孩子 是否可以使用 javascript 选择第 n 个孩子
  • 如何剪辑或剪切可组合项?

    如何剪辑或剪切可组合内容以使图像 按钮或可组合项具有自定义形状 这个问题不是关于使用Modifier clip 更像是用替代方法来完成任务 这些方法允许产生不可能的结果 或者当很难创建像云或方圆这样的形状时 This is 分享您的知识 问
  • 如何显示 HTML 资源文件?

    我有一个 html文件在我的assets目录 如何在 Flutter 中显示 渲染它 包裹来自颤动团队昨天发布 webview flutter 如何加载本地资源 将文件添加到项目并更新您的 pubspec assets assets you
  • 在 jQuery 中设置日期格式

    var date Fri Jan 29 2012 06 12 00 GMT 0100 我怎样才能以格式显示它2012 01 29 06 12 在 PHP 中是函数 gt 格式 在 Javascript 中也是格式 但如果我尝试使用它 则会出
  • 使用 useEffect 和异步函数反应错误边界,我缺少什么?

    In my Hello jsx我正在调用一个可能会失败的 API 组件 这里调用了一个假APIloader import React useEffect from react export const Hello gt const load
  • 是否可以更改 docker 容器中的日期?

    我有一个容器 里面有一个正在运行的程序 tomcat 我只需要更改此容器中的日期并测试我的程序行为 我有时间敏感的逻辑 有时需要看看几天或几个月后会发生什么 在docker中可以吗 我读到 如果我更改容器中的日期 主机系统上的日期也会更改
  • 为 Firebase 部署单独的 Cloud Function

    我希望能够为 Firebase 部署单独的 Cloud Function 这样我就不必每次都部署整个项目 没有通过 CLI 的选项 但如果 Google 或 Firebase 公开了一个 REST API 或其他一些接口来简化此操作 那就太
  • 如何将表情符号与 R 正则表达式匹配?

    我想确定矢量的哪些元素包含表情符号 x c no no x 1 U0001f602 no U0001f379 U0001f600 no U0001f61b 相关文章仅涵盖其他语言 并且因为它们大多引用专门的库 所以我无法找到翻译为 R 的方
  • 使用大量控件填充 FlowLayoutPanel 并按需绘制缩略图

    我正在尝试做一个ImageListBox一种可以显示大量缩略图的控件 就像 Picasa 使用的控件一样 这是我的设计 我有一个FlowLayoutPanel那里居住着很多UserControl对象 例如 4 000 个 每个UserCon
  • log-sum-exp 技巧为什么不递归

    我一直在研究 log sum exp 问题 我有一个以对数形式存储的数字列表 我想将其求和并以对数形式存储 朴素的算法是 def naive listOfLogs return math log10 sum 10 x for x in li
  • 作为开发人员,不同的 Ruby 线程模型(Ruby 与 JRuby)会对您的代码产生什么实际影响?

    我试图了解 MRI Ruby 1 8 和 JRuby 之间不同线程模型的实际影响 作为开发人员 这种差异对我意味着什么 另外 MRI Ruby 1 8 中是否有任何实际代码示例 由于不同的线程模型 它们在 JRuby 上的性能特征会更差 S
  • 如何进入微软的.NET框架源代码?

    我想进入微软的源代码 但不能 我按照以下说明进行操作配置 Visual Studio 进行调试 特别是 我禁用了 仅启用我的代码 并启用了 启用 NET Framework 源步进 最后 将源符号位置设置为 http referenceso
  • nginx 作为 NodeJS+socket.io 的代理:除了大消息外一切正常

    正如上所解释的nginx 的网站我使用了 nginx 的这些设置来将 websocket 代理到 NodeJS 服务器 location socket io proxy pass http backend proxy http versio
  • 为什么Javascript ===/== 字符串相等有时具有恒定时间复杂度,有时具有线性时间复杂度?

    在我发现常见 最新的 Javascript 实现正在使用 String Interning 来提高性能之后 常见的 JavaScript 实现是否使用字符串驻留 我想 对于字符串将得到常数 O 1 时间 所以我对这个问题给出了错误的答案 J
  • 在 Mathematica 中安全地设置“结构”

    像 Mathematica 中那样进行记录的问题已经在几个地方讨论过 例如Mathematica 中的结构数据类型 所有这些方法的问题在于 人们似乎失去了执行以下操作的能力 对每个参数进行特定的额外检查 就像当一个参数这样做时x Numer
  • 按日、月、年获取不同的 ISO 日期

    我想要为 MongoDB 中的所有文档对象获取一组不同的年份和月份 例如 如果文档有日期 2015 08 11 2015 08 11 2015 08 12 2015 09 14 2014 10 30 2014 10 30 2014 08 1
  • Gmail API 中的观看请求不起作用

    我正在尝试使用 python 发出监视请求 如谷歌API但它不起作用 request labelIds INBOX topicName projects myproject topics mytopic gmail users watch
  • 以编程方式使用备份数据库

    如何使用 bak 数据库备份文件 通过查询备份SQL 服务器 以编程方式 我希望我的应用程序将数据库备份到某个位置 我已经可以做到 并且我还希望它能够加载备份的数据库 bak 文件 我如何使用 C 来做到这一点 您需要首先确保您的开发盒上安
  • PowerShell 无法识别安装在同一脚本中的 AWS CLI

    我已经使用 powershell 脚本安装了 aws cli command Net ServicePointManager SecurityProtocol Net SecurityProtocolType Tls12 Invoke Ex
  • 计算存储数字所需位数的最快方法是什么

    我正在尝试优化一些位打包和拆包例程 为了进行打包 我需要计算存储整数值所需的位数 这是当前的代码 if n 1 return 32 if n 0 return 1 int r 0 while n r n gt gt 1 return r 不