循环按位运算 - 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值。
答
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
您测试的是什么值? – 2011-02-02 20:08:34