循环按位运算 - as3

时间:2011-02-02 20:03:16

标签: actionscript-3 operators bit-manipulation bitwise-operators

我是Bitwise操作概念的新手,今天正在搞乱一些例子。一切似乎都很清楚,直到我试图在uint上执行循环位移的功能:

    private function rotateLeft(value : uint, shift : int) : uint {
        if ((shift &= 31) == 0)
            return value;
        return (value << shift) | (value >> (32 - shift));
    }

任何想法为什么这不起作用?这看起来很简单,但我认为我遗漏了一些明显的东西。

编辑:

我愚蠢地试图移动一个颜色值(例如0xFF0000)并期望沿着0x0000FF的行,当实际上我得到0xFF000000(这是正确的,由于uint的长度) - 最重要的字节是alpha值。

1 个答案:

答案 0 :(得分:2)

1 - 始终保持您的班次在范围内=&gt; shift &= 31

2 - 使用无符号右移(>>>),否则您将拥有将传播到您的号码中的位符号,因此例如(0x80000000 >> 16)0xffff8000而不是0x00008000 {1}}。

function rotateLeft(value : uint, shift : int) : uint {
 shift &= 31;
 return (value << shift) | (value >>> (32 - shift));
}