VB .NET 与 Java 在计算时有所不同

6

有人能解释一下为什么.NET和Java计算结果不同吗?

方程式:

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

Java将其计算为

1173210151

.Net计算为

-574040108

我的问题是,我需要.Net计算与Java相同,因为我正在移植解密函数,如果计算不同,解密就不会正确。任何帮助都将不胜感激。
--更新--
谢谢大家,Xor是我应该使用的。还需要解决Java在整数数字太大时不抛出异常的问题。
Xor的结果为-3121757145。
(-1646490243 << 4) + 3333 Xor -1646490243 + -957401312 Xor (-1646490243 >> 5) + 4

结合我找到的这个链接中的答案:Java sum 2 negative numbers。与Java给出了相同的结果。
-3121757145 + 2 ^ 32 = 1173210151

1
在 Java 中,^XOR 运算符。我不熟悉 VB,但一些 Google 搜索提示说 Xor 是 xor 运算符,而 ^ 则是用于 VB 的指数运算。这可能是问题所在吗? - irrelephant
1个回答

3
我查看了JavaVisual Basic的运算符优先级表,它们在表达式中的运算符方面是相同的。因此这不是优先级的问题。
但需要注意的是,在Visual Basic中,^指数运算的运算符,而Xor异或运算的运算符。这与Java不同,Java使用^作为异或运算符,并没有指数运算符。表达式中的其他所有运算符在两种语言中都是相同的。

从代码中无法确定片段是Java还是Visual Basic中的一个 - 我猜测它是Java。如果是这种情况,很可能你混淆了异或运算符; 尝试在Visual Basic代码中用Xor替换^,看看是否解决了问题:

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

谢谢Oscar。Java和.Net的代码是相同的。我在两个IDE的调试模式下将方程式放入“Watch”窗口中。我尝试使用“Xor”,结果是-3121757145。对我来说,似乎Java出了问题,因为它返回的结果是一个正数。 - Seb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接