2011-03-01 46 views
1

的上级电力的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的输入是它会在上面的链接被提及的一个特例。

+1

我看到这个功能好几次。我根本不喜欢它。几乎整个可存储值的上半部分都会导致0.这是很多值的丢失......不幸的是,这只是没有解决方案。这个功能确实像@TonyK指出的那样起作用。 1不会返回2,因为1位被inital'num - ; stomped给你0。'num | ='行然后不做任何事,然后'num ++'将你再次置于1 。 – 2014-07-10 23:22:06

回答

2

什么问题? 1是2的幂:等于2^0。该算法按广告方式工作。

+0

啊!你是对的。我真的需要睡一会儿! – mbaker3 2011-03-01 22:47:10