【问题标题】:How to obtain the next Power Of Two of a given number? [duplicate]如何获得给定数字的下一个二次幂? [复制]
【发布时间】:2011-10-07 10:11:59
【问题描述】:

可能重复:
bit twiddling: find next power of two

如何获得给定数字的下一个二的幂?

例如,我收到号码 138,下一个 POT 号码是 256。

我收到数字 112,下一个 POT 是 128。

我需要做一个算法来计算

谢谢

【问题讨论】:

  • 这是作业,不是吗?你必须这样标记作业。
  • 为什么 112 的下一个 POT 是 256 而不是 128?

标签: java language-agnostic bit-manipulation


【解决方案1】:

真正聪明的程序员会查看 java.lang.Integer.highestOneBit(int) 方法,并考虑左移运算符 (<<)。

【讨论】:

  • +1;不知道这个方法存在!
  • 缺少具体公式。假设 128 的二的下一个幂是 128,那么 Math.max(1, Integer.highestOneBit(i - 1) << 1) 呢?
【解决方案2】:

这是一个非常简单的算法(因为这是作业,你必须自己编写代码):

  1. 1 作为第一个候选二的幂开始。
  2. 继续将候选数向左移动一位,直到它大于或等于目标数。

【讨论】:

    【解决方案3】:

    假设输入是一个正整数,一种非常规的解决方案是查看数字的位模式。找到左边的第一个“1”,然后考虑它左边的位的值。

    【讨论】:

    • 你能解释一下怎么做吗?
    猜你喜欢
    • 2010-11-22
    • 2014-07-20
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2020-12-14
    • 2019-06-14
    相关资源
    最近更新 更多