25

私は本当に大きな数を持っています:5799218898。そしてそれを13ビットに正しくシフトしたいと思います。
だから、windows-calculatorまたはpythonは私に:

5799218898 >> 13 | 100010100100001110011111100001 >> 13
70791 | 10001010010000111

予想通り。

しかし、Javascript:

5799218898 >> 13 | 100010100100001110011111100001 >> 13
183624 | 101100110101001000

javascriptの内部整数表現のせいだと思いますが、それについては何も見つかりません。

4

4 に答える 4

29

ECMAScript (Javascript) では、ビット単位の操作は常に 32 ビットです。したがって、5799218898 は 32 ビットに分割され、1504251602 になります。この整数 >> 13 は 183624 になります。

Python では、これらは任意の長さの整数です。それで問題ありません。

(また、Windows 電卓の数値は 64 ビットであり、5799218898 に十分収まります。)

(そして、正解は 707912 のはずです。)

于 2010-03-03T18:16:33.623 に答える
4

ニコラス・ザカスが述べているように

JavaScript の数値は技術的には 64 ビットで格納されますが、整数値は、ビット単位の演算子が関係する場合は常に 32 ビットであるかのように扱われます。

于 2010-03-03T18:23:11.447 に答える
2

あなたの数値 (5799218898) は 32 ビットを超えています。テストに使用している JavaScript エンジンについては言及していませんが、32 ビットである可能性が非常に高いです。

テストするには、番号の先頭にある「5」をトリミングして、32 ビット境界内に収まるようにします。その後、あなたのシフトはうまくいくはずです。

于 2010-03-03T18:17:11.753 に答える