我一直在努力实现AS3中以下链接中概述的Round Up Power Of 2算法。
http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
public static function upperPowerOfTwo(num:uint):uint
{
// if(num == 1) return 2;
num--;
num |= num >> 1;
num |= num >> 2;
num |= num >> 4;
num |= num >> 8;
num |= num >> 16;
num++;
return num;
}
该算法适用于我测试过的大多数值。提到当给定输入值0时,这将返回0,这在技术上是不正确的但我对该输出没问题。我不熟悉的是当输入1我得到输出1时。
我认为这必须是AS3的一个警告及其不稳定的实施,但我似乎无法弄明白。我也尝试过使用>>>逻辑移位算子得到相同的结果。
我的C有点生疏,但我不确定这怎么会在C中返回2。有人可以向我解释这里出错了吗?我假设如果1的输入是一个特殊情况,它将在上面的链接中提到。
答案 0 :(得分:2)
有什么问题? 1是2的幂:它等于2 ^ 0。该算法与广告一样有效。