2008-11-04 55 views
4

問題:有沒有簡單的方法(庫函數)在ActionScript中對大於32位的數字執行按位AND或OR操作?ActionScript/Flex:按位與/或在32位以上

來自文檔: 「位運算符在內部操作浮點數以將它們轉換爲32位整數,所執行的確切操作取決於運算符,但所有按位運算都評估32位的每個二進制數位位整數單獨計算一個新值。「

無賴......

我不能使用&或| ops - 是否公開一個庫函數來爲Numbers執行此操作?

細節:我正在移植一堆java來flex,並且java維護着一堆'long'掩碼。我知道我可以在彈性方面將Java掩碼分成兩個整數。由於我所有的掩碼操作都是本地化的,所以不會太痛苦。但是,我想盡可能保持端口爲1-1。

有什麼建議嗎? 謝謝!

回答

1

我認爲你最直截了當的選擇是打破口罩,如果可能的話,被屏蔽的數據分成兩部分。你正在迎接一個功能差距,所以如果你能提供幫助,就沒有任何意義。如果你不需要真正的BigNum支持,最好不要考慮它。

1

如果你不介意移植一些JavaScript,Leemon貝爾德寫了一個公共領域的Javascript庫在這裏處理大整數:

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

你將無法明確使用&和|運算符,但您應該能夠使用bitwiseAnd和bitwiseOr方法來增強現有代碼。

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.. 
} 

`

+0

確認這完美的作品。太好了! – 2011-02-21 21:05:18

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)); 
}