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

7

可能是重复问题:
位操作:查找下一个二的幂

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

例如,我收到数字138,下一个POT数字是256。

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

我需要编写一个计算该值的算法。

谢谢


1
这是作业,对吧?你必须将它标记为作业。 - Marcin
7
为什么在112之后,256成为下一个2的幂次方而不是128? - sth
3个回答

15

一位非常聪明的程序员会查看 java.lang.Integer.highestOneBit(int) 方法,并考虑左移操作符 (<<)。


1
+1;不知道那个方法存在! - S.L. Barth
3
缺少一个具体的公式。假设128的下一个二次幂为128,那么Math.max(1, Integer.highestOneBit(i - 1) << 1)是什么意思? - Thomas Mueller

6

以下是一个非常简单的算法(由于这是作业,您需要自己编写代码):

  1. 1 为第一个候选的二次幂。
  2. 不断将候选数字左移一位,直到大于或等于目标数字。

5
假设输入是正整数,一个非传统的解决方案是查看数字的位模式。从左边找到第一个'1',然后考虑该位左边的数字值。

你能否请教我如何做吗? - NullPointerException

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接