将一个数字除以 2 的幂

Divide a number into powers of two?

本文关键字:的幂 数字 一个      更新时间:2023-10-16

这是问题的示例。假设我有两个数字 int basic_block 和 int 块。基本块是 2 的幂,块是可被 basic_block 整除的数字。因此,请考虑此示例,其中 basic_block = 128,块 = 640。我需要将块分成不同的数字,这些数字是 2 的幂。这两个数字应大于或等于basic_block。所以我会有 512 和 128 之类的东西。在这种情况下,我应该得到第一个数字 512,因为它是小于 2 的最大幂 小于 640。

是否有可用于执行此操作的功能?

只需循环播放 2 的幂,直到您的结果大于 block .如果幸运的话,(2^n)>block (block - 2^(n-1))的结果是 2 的另一个幂,如果没有,请用 block-2^(n-1) 重新运行此函数,直到 block 为 1...

我会使用 C 数学库执行以下操作:

function int getBlockSize(int value) {
  return (int)(floor(log2(value)));
}

不要忘记使用 -lm 编译器标志链接到数学库

是否有可用于执行此操作的功能?

是的,你写的那个。

你基本上需要递归地将一个数字分解成 2 的幂,可以和它,或者循环进行。