AS3实现两种算法的上功率

时间:2011-03-01 22:18:47

标签: c actionscript-3 bit-manipulation

我一直在努力实现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的输入是一个特殊情况,它将在上面的链接中提到。

1 个答案:

答案 0 :(得分:2)

有什么问题? 1是2的幂:它等于2 ^ 0。该算法与广告一样有效。