JavaScript 检查数字编码需要多少位的函数?

JavaScript function to check how many bits are required to encode a number?

我有以下问题。这是示例 input/output 数据:

不过,那只是用最少的位数来编码数字而已。我想要一些稍微不同的东西,我很难理解它。我希望输出是 2 的幂。

我如何编写一个函数,它接受 JavaScript 中的整数,并且 returns 给我 o 作为那个数字?一个有效地完成它而不是将东西转换为字符串并使用随机 JS 辅助函数的方法:)

如果您打算编写函数,如果输入之间没有相关性,您可能必须使用二元运算符一次一个地迭代 64 位。如果您只想要第二个用例,请检查它是否已经是 2 的幂,反之亦然。检查 2 的幂。 n~(n-1) == 0

P.S 在移动设备中,请注意编辑错误。

如果您喜欢摆弄,可以find the position of the MSB then find the next power of 2(对于低于 2 的两个值是例外情况)。

我们还可以找到一个封闭的形式:

const bits = x => Math.floor(1+Math.log2(x))
const npot = x => Math.pow(2, Math.ceil(Math.log2(x)))
const f = x => x < 2 ? 2 : npot(bits(x))

但是,鉴于范围内的 2 次幂数量较少,仅使用条件阶梯会更容易、更快速:

const f = x => {
  if (x < 2**2) return 2;
  if (x < 2**4) return 4;
  if (x < 2**8) return 8;
  if (x < 2**16) return 16;
  if (x < 2**32) return 32;
  return 64;
}

(使用 bigints 时,使用循环...)