4

質問: ActionScript で 32 ビットより大きい数値に対してビットごとの AND または OR を実行する簡単な方法 (ライブラリ関数) はありますか?

ドキュメントから:「ビット単位の演算子は、内部的に浮動小数点数を操作して 32 ビット整数に変更します。実行される正確な操作は演算子によって異なりますが、すべてのビット単位の操作は、32 ビット整数の各 2 進数 (ビット) を個別に評価して、新しい値を計算します。」

残念...

& または | を使用できません。ops - AS は Numbers に対してこれを行うライブラリ関数を公開していますか?

仕様: 私は多くの Java を flex に移植しており、Java は多くの「長い」マスクを保持しています。フレックス側で Java マスクを 2 つの int に分割できることはわかっています。私のマスク マニピュレーションはすべてローカライズされているので、これはそれほど苦痛ではありません。ただし、ポートはできるだけ 1 対 1 のままにしておきたいと思います。

助言がありますか?ありがとう!

4

5 に答える 5

1

最も簡単なオプションは、マスクを分割し、可能であればマスクされているデータを 2 つに分割することだと思います。あなたは機能のギャップに直面しているので、それを助けることができればトリッキーであっても意味がありません. また、実際の 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 に答える
1

Javascript の移植を気にしない場合は、Leemon Baird が大きな整数を処理するためのパブリック ドメインの Javascript ライブラリを作成しました。

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

& と | を明示的に使用することはできません。ただし、bitwiseAnd および bitwiseOr メソッドを使用して既存のコードを拡張できるはずです。

于 2008-11-05T14:31:21.367 に答える
0

http://livedocs.adobe.com/flex/3/html/help.html?content=03_Language_and_Syntax_11.htmlによると、64 ビット整数 (符号付きまたは符号なし) はなく、32 ビットのみです。

上記のように、数値型には 53 ビットの仮数部があり、短すぎます。

BigNum FLEX 実装を検索しましたが、見つかりませんでした。

intの配列または高低のintを持つクラスのいずれかでこれをシミュレートする必要があると思います。

がんばれ、ランディ・ステグバウアー

于 2008-11-05T14:05:09.737 に答える