【问题标题】:Circular bitwise operation - as3循环按位运算 - as3
【发布时间】:2011-06-20 05:43:54
【问题描述】:

我对按位运算的概念不熟悉,今天在搞乱一些例子。一切似乎都很清楚,直到我尝试创建一个函数以在 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 值。

【问题讨论】:

  • 你在测试什么值?

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


【解决方案1】:

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

2 - 使用无符号右移 (&gt;&gt;&gt;),否则您将拥有将传播到您的号码中的位符号,例如,(0x80000000 &gt;&gt; 16) 将是 0xffff8000 而不是 0x00008000

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

【讨论】:

  • 感谢这帮助我找出问题所在。结果证明我得到了正确的结果,但这并不是我所期望的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多