循环按位运算 - as3

问题描述:

我对位运算的概念很陌生,今天正在讨论一些例子。一切似乎很清楚,直到我试图做出一个uint进行圆位位移功能点:循环按位运算 - as3

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值。

+0

您测试的是什么值? – 2011-02-02 20:08:34

1 - 始终保持你的转移范围=>shift &= 31

2 - 使用无符号右移(>>>),否则你将有位符号,将传播到你的电话号码,因此,例如(0x80000000 >> 16)会是0xffff8000而不是0x00008000

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

谢谢,这帮助我找出了什么是错的。结果我得到了正确的结果,但这并不是我期待的! – soulBit 2011-02-02 21:30:58