这是问题的例子。假设我有两个数字int basic_block和int block。 基本块是一个2的幂的数字,block是一些可被basic_block整除的数字。所以考虑这个例子,其中basic_block = 128和block = 640.我需要将块分成两个幂的不同数字。这两个数字应该大于或等于basic_block。所以我会有像512和128这样的东西。在这种情况下,我应该得到第一个数字为512,因为它的最大功率为2小于640.
我可以用它来做这个功能吗?
答案 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的幂,或者在循环中进行。