4

问:有没有简单的方法(库函数)在 ActionScript 中对大于 32 位的数字执行按位与或或?

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

无赖...

我不能使用 & 或 | ops - AS 是否公开了一个库函数来为 Numbers 执行此操作?

细节:我将一堆 java 移植到 flex 并且 java 维护一堆“长”掩码。我知道我可以在 flex 端将 Java 掩码拆分为两个整数。由于我所有的面具操作都是本地化的,这不会太痛苦。但是,我想尽可能保持端口为 1-1。

有什么建议么?谢谢!

4

5 回答 5

1

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

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

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

于 2008-11-05T14:31:21.367 回答
1

我认为您最直接的选择是将掩码(如果可能的话,将被掩码的数据)分成两部分。您正在与功能差距对接,因此如果您能提供帮助,那么棘手是没有意义的。如果您不需要真正的 BigNum 支持,最好不要考虑它。

于 2008-11-06T02:35:46.553 回答
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..
}

`

于 2009-12-10T09:01:27.327 回答
0

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

如上所述,Number 类型有一个 53 位尾数,这对您来说太短了。

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

我猜您将不得不使用整数数组或具有高整数和低整数的类来模拟这一点。

祝你好运,兰迪·施泰格鲍尔

于 2008-11-05T14:05:09.737 回答
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));
}
于 2017-05-23T09:15:17.720 回答