ActionScript / Flex:按位和/或超过32位

时间:2008-11-04 01:05:16

标签: flex actionscript bit-manipulation

问题:在ActionScript中,是否有一种简单的方法(库函数)对大于32位的数字执行按位AND或OR?

来自文档: “按位运算符在内部操作浮点数以将它们更改为32位整数。执行的确切操作取决于运算符,但所有按位运算分别评估32位整数的每个二进制数字(位)以计算新值。“

...无赖

我无法使用&或者ops - AS公开了一个库函数来为Numbers做这个吗?

细节:我正在移植一堆java以进行flex,而java维护了一堆'long'掩码。我知道我可以在Flex端将Java掩码分成两个整数。由于我的所有蒙版操作都已本地化,因此不会太痛苦。但是,我想尽可能保持端口为1-1。

有什么建议吗? 谢谢!

5 个答案:

答案 0 :(得分:1)

如果您不介意移植一些Javascript,Leemon Baird已经编写了一个用于处理大整数的公共域Javascript库:

http://www.leemon.com/crypto/BigInt.html

您将无法明确使用&和|运算符,但您应该能够使用bitwiseAnd和bitwiseOr方法扩充现有代码。

答案 1 :(得分:1)

我认为你最直接的选择是打破面具,如果可能的话,将被屏蔽的数据分成两部分。你正在抵制一个功能差距,所以如果你能提供帮助就没有任何意义。如果您不需要真正的BigNum支持,最好不要考虑它。

答案 2 :(得分:1)

`

public class NumberUtils
{
  public static const MSB_CONV : Number = Math.pow(2, 32);

  public static function bitwiseAND(num1 : Number, num2 : Number) : Number {
    var msb1 : int = num1 / MSB_CONV;
    var msb2 : int = num2 / MSB_CONV;

    return (msb1 & msb2) * MSB_CONV + (num1 & num2);
  }
..OR..shiftRight..
}

`

答案 3 :(得分:0)

根据http://livedocs.adobe.com/flex/3/html/help.html?content=03_Language_and_Syntax_11.html,没有64位整数(有符号或无符号)...只有32位。

如上所述,数字类型有一个53位的尾数,对你来说太短了。

我搜索了一个BigNum FLEX实现,但找不到。

我猜你必须使用一个int数组或一个具有高和低int的类来模拟它。

祝你好运, 兰迪斯蒂鲍尔

答案 4 :(得分:0)

public function readInt64():Number
{
    var highInt:uint = bytes.readUnsignedInt();
    var lowerInt:uint = bytes.readUnsignedInt();
    return highInt * Math.pow(2,32) + lowerInt;
}

public function writeInt64(value:Number):void
{
    this.writeUnsignedInt(int(value / 0xffffffff));
    this.writeUnsignedInt(int(value));
}