问题:在ActionScript中,是否有一种简单的方法(库函数)对大于32位的数字执行按位AND或OR?
来自文档: “按位运算符在内部操作浮点数以将它们更改为32位整数。执行的确切操作取决于运算符,但所有按位运算分别评估32位整数的每个二进制数字(位)以计算新值。“
...无赖
我无法使用&或者ops - AS公开了一个库函数来为Numbers做这个吗?
细节:我正在移植一堆java以进行flex,而java维护了一堆'long'掩码。我知道我可以在Flex端将Java掩码分成两个整数。由于我的所有蒙版操作都已本地化,因此不会太痛苦。但是,我想尽可能保持端口为1-1。
有什么建议吗? 谢谢!
答案 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));
}