Итак, какой будет тип данных, на который я смотрю. Я знаю, что AS3 Number является 64-битным, но это двойная точность. Я конвертирую код в C ++, и так как в AS3 это действительно так:
var i:Number = 123;
i >> 3; // Yeah shift right a double precision datatype
Поэтому в C ++ мне нужен теперь тип данных, который находится в целочисленном диапазоне типа Number в AS3 (с двойной точностью). Обратите внимание, что я конвертирую и кодирую / декодирую функции, которые ранее использовались с кодом AS3, поэтому у меня должен быть тот же результат.
Заранее спасибо.
Оператор сдвига AS3 преобразует сдвигаемое выражение и величину сдвига в 32-разрядные целые числа. В C ++ вы эмулируете это поведение, приводя двойной тип данных к int и сдвигая:
#include <iostream>
int main(int argc, char **argv) {
double i(91.5);
int v(static_cast<int>(i) >> 3);
std::cout << "v = " << v << std::endl; // outputs "v = 11"return 0;
}
По сути, в AS3 число является числом с двойной точностью, поэтому в C ++ это будет double
тип. Но сдвиги битов в AS3 осуществляются посредством неявного преобразования. Вы должны проверить, является ли результат на самом деле int или double, и если int, вы делаете
i=floor(i/8.0);
и если удвоить, вы бросаете вызов floor ().
Короче говоря, вы должны явно переписать операции, которые выполняются с целыми числами, а не с двойными. Но вы можете сделать как (int)i
когда операция требует int, и я удваивается.