那么我正在研究的数据类型是什么。我知道AS3 Number是64位但它是双精度。我正在将代码转换为C ++,因为在AS3中这样做是有效的:
var i:Number = 123;
i >> 3; // Yeah shift right a double precision datatype
所以在C ++中我现在需要一个数据类型,它在AS3中的Number类型的整数范围内(这是双精度)。请注意我正在转换和编码/解码先前与AS3代码一起使用的函数,因此我必须得到相同的结果。
提前致谢。
答案 0 :(得分:1)
AS3移位运算符将正在移位的表达式和移位量转换为32位整数。在C ++中,您通过将double数据类型转换为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;
}
答案 1 :(得分:0)
基本上,在AS3中,Number是一个双精度数,因此在C ++中,它将是double
类型。但是,AS3中的位移是通过隐式转换完成的。您应该检查结果实际上是int还是double,如果是int,则执行
i=floor(i/8.0);
如果是双倍,则删除floor()调用。
简而言之,您必须明确重写在int上而不是双精度上执行的操作。但是,当操作需要int时,你可以像(int)i
那样做,而且我是双倍的。