3

那么我正在查看的数据类型是什么。我知道 AS3 Number 是 64 位的,但它是双精度的。我正在将代码转换为 C++,因为在 AS3 中这样做是有效的:

var i:Number = 123;
i >> 3; // Yeah shift right a double precision datatype

因此,在 C++ 中,我现在需要一个数据类型,该数据类型位于 AS3 中 Number 类型的整数范围内(即双精度)。请注意,我正在转换和编码/解码以前与 AS3 代码一起使用的函数,因此我必须得到相同的结果。

提前致谢。

4

2 回答 2

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;
}
于 2012-10-02T18:17:08.417 回答
0

基本上,在 AS3 中 Number 是一个双精度数,所以在 C++ 中它将是double类型。但是,AS3 中的位移是通过隐式转换完成的。您应该检查结果实际上是 int 还是 double,如果是 int,则执行

i=floor(i/8.0);

如果双倍,你放弃 floor() 电话。

简而言之,您必须显式重写在整数而不是双精度上完成的操作。(int)i但是,当一个操作需要一个 int 并且 i 是 double 时,你可以这样做。

于 2012-10-02T18:16:29.850 回答