-1

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

有没有我可以用来执行此操作的功能?

4

3 回答 3

1

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

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

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

于 2013-10-13T19:32:10.940 回答
1

只需遍历 2 的幂,直到您的结果大于block. 如果幸运的话,(block - 2^(n-1))with的结果(2^n)>block是另一个 2 的幂,如果不是,请重新运行此函数,block-2^(n-1)直到block为 1...

于 2013-09-17T20:33:32.237 回答
0

有没有我可以用来执行此操作的功能?

是的,你写的那个。

您基本上需要将一个数字递归地分解为可以求和的 2 的幂,或者在循环中进行。

于 2013-09-17T20:33:54.340 回答