6

.netがこれらをJavaとは異なる方法で計算している理由を誰かが私に説明できますか

方程式

(-1646490243 << 4) + 3333 ^ -1646490243 + -957401312 ^ (-1646490243 >> 5) + 4

Javaはそれを次のように計算します

1173210151

.Netは次のように計算します

-574040108

私の問題は、復号化関数を介して移植しているJavaと同じように.Netを計算する必要があることです。計算方法が異なると、復号化が正しく行われません。

どんな助けでもいただければ幸いです。

- アップデート -

みんなありがとう、Xorは私が使うべきものでした。さらに、整数が大きすぎる場合に例外をスローしないようにJavaを回避する必要があります。

Xorは-3121757145の結果を出します

(-1646490243 << 4) + 3333 Xor -1646490243 + -957401312 Xor (-1646490243 >> 5) + 4

これを私が見つけたこのリンクからの答えと組み合わせてください-Java合計2の負の数。Javaと同じ結果が得られます

-3121757145 + 2 ^ 32 = 1173210151
4

1 に答える 1

3

JavaVisualBasicの演算子の優先順位テーブルを確認しましたが、式の演算子に関しては同じです。したがって、優先順位の問題ではありません。

ただし、Visual Basicでは指数^の演算子であるのに対し、排他的論理和の演算子であることに注意してください。これは、演算子を排他的論理和として使用するJavaとは異なり、べき乗用の演算子はありません。式の他のすべての演算子は、両方の言語で同じですXor^

スニペットがJavaのものなのか、VisualBasicのものなのかをコードから判断することはできません。おそらくJavaのものだと思います。その場合、排他的論理和を混同している可能性があります。Visual Basicコードでに置き換えてみて^、問題が解決するかどうかを確認してください。Xor

(-1646490243 << 4) + 3333 Xor -1646490243 + -957401312 Xor (-1646490243 >> 5) + 4
于 2012-11-12T03:39:51.833 に答える