3

それで、私が見ているデータ型は何でしょうか。AS3番号は64ビットですが、倍精度です。私はコードをC++に変換していますが、AS3ではこれを行うことが有効です。

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

したがって、C ++では、AS3の数値型(倍精度)の整数範囲にあるデータ型が必要になります。以前に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++ ではdoubletype になります。ただし、AS3 でのビット シフトは、暗黙的な変換によって行われます。結果が実際に int であるか double であるかを確認する必要があります。int の場合は、そうします。

i=floor(i/8.0);

double の場合は、floor() 呼び出しをドロップします。

つまり、double ではなく int に対して実行される操作を明示的に書き直す必要があります。(int)iただし、操作に int が必要で、i が double の場合は、このようにすることができます。

于 2012-10-02T18:16:29.850 に答える