0

数値を使用するPythonコードがあります( 32ビットシステム2637268776よりも大きい)。sys.maxintしたがって、longタイプとして保存されます。

コードでC++フレームワークバインディングを使用しているので、変換されint32てint32オーバーフローが発生する場合があります。

2637268776 --> -1657698520

私の場合、それは1回だけ発生する可能性があるため、整数が負の場合、単一のintオーバーフローが発生したと考えるのが安全です。どうすれば数学的に数字を逆にすることができますか?

4

2 に答える 2

5

要するに、あなたはできません。同じ負の数にマップされる多くの長整数があります。あなたの例では、これらは2637268776L、6932236072L、11227203368L、15522170664L、19817137960Lなどです。

また、このようなオーバーフローの結果としての数を取得する可能性があります。たとえば、4294967297Lは1にマップされます。

于 2013-03-26T12:02:46.440 に答える
1

あなたはそれに追加2 * (sys.maxint + 1)することができます:

>>> -1657698520 + (2 * (sys.maxint + 1))
2637268776L

2 * (sys.maxint + 1)ただし、それを超えるとオーバーフローが正の数になるか、さらに悪いことに再びオーバーフローするため、これは元の値<に対してのみ機能します。

于 2013-03-26T12:02:09.980 に答える