的上级电力的AS3实现我一直在努力实施围捕发电在AS3下面的链接概述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和其wonky uint实施的警告,但我似乎无法数字出来。我也尝试使用>>>逻辑移位运算符得到相同的结果。
我的C是有点生疏,但我不知道如何做到这一点即使在返回C. 2谁能给我解释一下怎么回事错在这里?我认为,如果1的输入是它会在上面的链接被提及的一个特例。
我看到这个功能好几次。我根本不喜欢它。几乎整个可存储值的上半部分都会导致0.这是很多值的丢失......不幸的是,这只是没有解决方案。这个功能确实像@TonyK指出的那样起作用。 1不会返回2,因为1位被inital'num - ; stomped给你0。'num | ='行然后不做任何事,然后'num ++'将你再次置于1 。 – 2014-07-10 23:22:06