将数字除以2的幂?

时间:2013-09-17 20:25:31

标签: c++ bit-manipulation

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

我可以用它来做这个功能吗?

3 个答案:

答案 0 :(得分:1)

只需循环使用2的幂,直到结果大于block。如果你很幸运,(block - 2^(n-1))(2^n)>block的结果是另一个2的幂,如果没有,请用block-2^(n-1)重新运行此函数,直到block为1 ... < / p>

答案 1 :(得分:1)

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

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

不要忘记使用-lm编译器标志

链接到数学库

答案 2 :(得分:0)

  

我可以用它来做这个功能吗?

是的,你写的那个。

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