当前位置: 首页 > 知识库问答 >
问题:

用相同的设置位数寻找下一个更大的数

巫马炫明
2023-03-14

我在研究一个问题,给我一个数字n,我必须找到下一个更大的元素,有相同的设置位数。当我在网上搜索时,我发现了一段有趣的代码,它在这里用了几行代码(有点神奇):

unsigned nexthi_same_count_ones(unsigned a) {
  /* works for any word length */
  unsigned c = (a & -a);
  unsigned r = a+c;
  return (((r ^ a) >> 2) / c) | r);
}

有人能用简单的步骤解释一下逻辑吗?

谢谢

共有1个答案

澹台啸
2023-03-14

在下一个较高的数字中,1的最右边运行的最左边的10放在它的左边,而剩下的1移动到最右边。

  • 代码隔离最低1
  • 将其添加到A(使pripple通过下一个更高的0,反转所有这些位)
  • ex-or得到最小有效运行的一个,向左扩展一个位置。
  • 将其向右移动两个位置将使其左边界位于原始边界的右一个位置(从高位离开那个0的位置),
  • 除以最低的1可以容纳与A右端相同的0位。
 类似资料:
  • 本文向大家介绍寻找一数组中前K个最大的数相关面试题,主要包含被问及寻找一数组中前K个最大的数时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组    

  • 我需要得到一个32位数字中的1位数字,其中只有一个1位(总是)。在C++或ASM中最快的方法。 例如

  • 问题来了。 给出了一个加权无向连通图G。重量是不变的。任务是提出一个算法,该算法将找到满足以下两个条件的生成树的总权重(按优先级排序): 生成树必须具有相同权重的最大边数(实际重复权重值与此无关); 总生成树权重应最小化。这意味着,例如,权重为120的生成树T1最多有4条相同权重的边(这四条边中的每一条的权重都是15)应该优于权重为140的生成树T2,这四条边最多有4条相同权重的边(这四条边中的每

  • 问题内容: 我正在为一个日志分析器系统工作,该系统读取tomcat的日志并通过网页中的图表/表格显示它们。(我知道有一些现成的日志分析器系统,我正在重新创建轮子。但这是我的工作,我的老板想要。) 我们的tomcat日志按天保存。例如: 以下是我将日志导出到db并读取它们的方式: 1数据库结构 我有三个表:1)log_current:保存今天生成的日志。 2)log_past:保存今天之前生成的日志

  • 本文向大家介绍给一个数,去一个已经排好序的数组中寻找这个数的位置(通过快速查找,二分查找)?相关面试题,主要包含被问及给一个数,去一个已经排好序的数组中寻找这个数的位置(通过快速查找,二分查找)?时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 假设我在数据库中存储了一堆假期。 我需要做的是找出下一个工作日,不包括数据库中定义的星期六和公众假期。 例如。 假设今天是2月15日(星期五),而17日和18日是公众假期(在数据库中定义为日期时间)。因此,现在当我按下显示下一个工作日的按钮时,它将返回2月19日。 哪种方法最有效? 问题答案: 最简单 第1步:从数据库获取假期并将其格式化为您的格式,并将其保留在 第2步:创建一个增加天