Вопрос: Есть ли простой способ (библиотечная функция) выполнить побитовое И или ИЛИ над числами, превышающими 32-разрядные, в ActionScript?
Из документов: «Побитовые операторы внутренне манипулируют числами с плавающей запятой, чтобы преобразовать их в 32-битные целые числа. Точная выполняемая операция зависит от оператора, но все побитовые операции оценивают каждую двоичную цифру (бит) 32-битного целого числа индивидуально для вычисления нового значения. . "
Облом ...
Я не могу использовать & или | ops - предоставляет ли AS библиотечную функцию для этого для Numbers?
Особенности: я портирую кучу java для гибкости, а java поддерживает кучу «длинных» масок. Я знаю, что могу разделить маски Java на два целых на стороне гибкости. Поскольку все мои манипуляции с маской локализованы, это не будет слишком болезненно. Тем не менее, я хотел бы сохранить порт как можно более 1-1.
Какие-либо предложения? Спасибо!





Согласно http://livedocs.adobe.com/flex/3/html/help.html?content=03_Language_and_Syntax_11.html, нет 64-битных целых чисел (со знаком или без знака) ... только 32-битные.
Тип Number, как вы упомянули выше, имеет 53-битную мантиссу, что для вас слишком мало.
Я искал реализацию BigNum FLEX, но не нашел.
Я предполагаю, что вам придется смоделировать это либо с массивом int, либо с классом с высоким и низким int.
Удачи, Рэнди Стегбауэр
Если вы не против портировать какой-нибудь Javascript, Лемон Бэрд написал общедоступную библиотеку Javascript для обработки больших целых чисел:
http://www.leemon.com/crypto/BigInt.html
Вы не сможете явно использовать & и | операторы, но вы должны иметь возможность дополнить существующий код методами bitwiseAnd и bitwiseOr.
Я думаю, что ваш самый простой вариант - разбить маски и, если возможно, маскируемые данные на две части. Вы сталкиваетесь с пробелом в функциях, поэтому нет смысла хитрить, если вы можете помочь. И если вам не нужна настоящая поддержка BigNum, лучше даже не рассматривать ее.
`
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..
}
`
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));
}