表示数字 x 所需的位数

2024-01-03

我目前正在尝试编写一个算法来确定表示数字 x 需要多少位。我的实现将在 c 中。 不过,有一些问题,我几乎只能使用按位运算符 {~、&、^、|、+、>}。另外,我不能使用任何类型的控制流(if、while、for)。 我最初的方法是从左到右检查二进制数,并查找第一个“1”出现的位置。鉴于我所受到的限制,我不确定如何解决这个问题。 我正在使用的数字可以被视为无符号整数。因此 00110 只需要 3 位。

我想知道是否有一种更简单/更干净的方法来做到这一点,而我错过了它? 或者如果有人可以给出一些提示?

基本上,我试图在没有 while 循环的情况下实现这一点:

 int result = 0;
  while (x >>= 1) {
    result += 1;
  }
  return result;

http://www-graphics.stanford.edu/~seander/bithacks.html#IntegerLog http://www-graphics.stanford.edu/~seander/bithacks.html#IntegerLog

展示如何在没有控制流的情况下做到这一点。

unsigned int v;          // 32-bit value to find the log2 of 
register unsigned int r; // result of log2(v) will go here
register unsigned int shift;

r =     (v > 0xFFFF) << 4; v >>= r;
shift = (v > 0xFF  ) << 3; v >>= shift; r |= shift;
shift = (v > 0xF   ) << 2; v >>= shift; r |= shift;
shift = (v > 0x3   ) << 1; v >>= shift; r |= shift;
                                        r |= (v >> 1);
r++;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

表示数字 x 所需的位数 的相关文章

随机推荐

  • Android - 用于语音识别的外部 MIC

    我需要知道将麦克风或耳机连接到设备时会触发哪个事件 并且我正在使用语音识别 并且观察到它不会遵循与设备未连接任何设备时相同的流程 我想知道是否有某种解决方案 因为我目前正在创建的应用程序是在智能手机中进行测试的 但将来需要连接麦克风或耳机
  • 使用 Moment,js 获取本月所有星期一日期

    有没有办法使用 moment js 库获取当月的所有星期一日期 我知道我可以通过以下方式得到月底 moment endOf month 但如何获取当前 任何月份的所有星期一日期 我不想要 javascript 默认日期库中的某些函数 请参考
  • 如何在功能组件中更改父组件的子状态组件

    我创建了一个倒计时器组件 我在这个组件附近有一个按钮 我希望当用户单击此按钮时重置计时器 为此我应该改变子状态 我找到了从孩子那里改变父母状态的解决方案 但我找不到解决方案 可以用ref解决吗 我的计时器组件是一个功能组件 React re
  • 同时验证两个字段

    我正在看这篇文档 清理和验证相互依赖的字段 https docs djangoproject com en stable ref forms validation cleaning and validating fields that de
  • 尝试加载 PDFTron Android 库时出错

    当尝试与 PDFTron 即 PDFNet Android SDK 集成时 我遇到了一个奇怪的错误 UnsatisfiedLinkError 无法加载 PDFNetC findLibrary 返回 null 预期为armv7a 发现cpu
  • UITableView:向上滑动时缩小选项卡栏和导航栏

    Scenario 我有一个应用程序 它使用标签栏控制器 屏幕底部 和导航控制器 屏幕顶部 UI 设计 在一个视图控制器上 我有一个 UITableView 其中包含用户将 向上滑动 以滚动表格以查看内容的内容 Need 很像雅虎 和 Ins
  • 在 C++ 代码执行过程中每 t 毫秒执行一次测量

    给定一个 while 循环和函数顺序如下 int k 0 int total 100 while k
  • 使用 Leap Motion 检测滑动手势方向

    我正在尝试使用 javascript API 通过 Leap Motion 简单地获取滑动手势的方向 我的代码是 document ready function controller new Leap Controller ws local
  • 验证Java中golang生成的rsa.SignPKCS1v15签名

    我试图让 Java 验证签名的 SHA 1 哈希值 但它一直返回 false 我在 Go 中有以下代码 它生成 RSA 密钥对并签名并返回到达 sign 端点的任何消息以及十六进制编码的哈希值以及公钥模数和指数 package main i
  • Python 和 PyQt:从另一个类运行函数

    更新3 这是新代码 试图按照你告诉我的去做 但没有结果 我开始认为我在程序中的某个地方做了一些非常愚蠢的事情 有什么新想法吗 程序 py coding utf 8 imports import os import platform impo
  • 如何在 SQL 中截断秒?

    我有时间 选择cast SYSDATETIME AS time 14 59 09 2834595 截断秒的方法是什么 14 59 描述 您可以使用T SQL函数convert Sample PRINT convert varchar 5 S
  • 如何证明两个 HTML 页面看起来相同?

    例如 我有这个 pre sun br nbsp nbsp nbsp nbsp mercury br nbsp nbsp nbsp nbsp venus br nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp e
  • IE8/9 中的 CSS3 动画

    我知道 CSS3 动画在 IE 中不起作用 我只是想知道 JavaScript 是否有解决这个问题的方法 这是我想在 IE 中重新创建的内容的链接 http animation kashoo co uk http animation kas
  • 多处理队列子类问题

    我想子类化 multiprocessing Queue 来实现进程以获取队列的块 唯一的问题是 我收到了一个奇怪的 TypeError usr bin env python whaaaaa from multiprocessing impo
  • Swift Combine - 等待所有发布者

    我正在尝试使用 Swift 组合来运行许多具有相同结果的任务 目前 每个任务都是一个将发出结果的发布者 现在我面临一个问题 我必须等待所有发布者发出该元素然后继续 有点像调度组 我找到了 zip 带有 运算符需要 4 个发布者 https
  • 如何使用 dbghelp!StackWalk64 遍历混合模式(托管+本机)堆栈?

    我正在尝试使用 StackWalk64 在 x64 进程上遍历包含托管帧和本机帧的调用堆栈 一切工作正常 直到第一个或第二个托管帧 之后 StackWalk64 无法计算出该帧的返回地址并失败 我使用 SymFunctionTableAcc
  • 每六个小时在 Linux 上运行一次 cron 作业

    如何每天每六个小时运行一次命令 我尝试了以下方法 但没有成功 6 mycommand 你忘记了一个 而且你的字段太多了 这是你需要关心的时刻 0 6 path to mycommand 这意味着从 0 开始每六小时一次 即在 0 6 12
  • :确认和:方法在 Rails Button_to 中不起作用

    我的 Rails 3 应用程序出现问题 在我看来我有 生成的html是
  • 用于写出 7 进制字的函数,如二进制计数器样式

    我需要一个类似于这里解释的功能 用于写出单词的 JS 函数 二进制计数器风格 https stackoverflow com questions 2328018 js function for writing out a word bina
  • 表示数字 x 所需的位数

    我目前正在尝试编写一个算法来确定表示数字 x 需要多少位 我的实现将在 c 中 不过 有一些问题 我几乎只能使用按位运算符 gt 另外 我不能使用任何类型的控制流 if while for 我最初的方法是从左到右检查二进制数 并查找第一个