VB .NET与Java的计算方式不同

Seb*_*Seb 6 .net java vb.net encryption math

有人可以向我解释为什么.net正在以不同的方式计算Java

等式

(-1646490243 << 4) + 3333 ^ -1646490243 + -957401312 ^ (-1646490243 >> 5) + 4
Run Code Online (Sandbox Code Playgroud)

Java将其计算为

1173210151
Run Code Online (Sandbox Code Playgroud)

.Net计算为

-574040108
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要.Net来计算与Java相同的内容,因为我正在移植一个解密函数,如果计算方式不同,那么解密就不会是正确的.

任何帮助,将不胜感激.

--Update--

谢谢你们,Xor是我应该使用的.另外,当Integer数字太大时,需要解决Java没有抛出异常的问题.

Xor给出-3121757145的结果

(-1646490243 << 4) + 3333 Xor -1646490243 + -957401312 Xor (-1646490243 >> 5) + 4
Run Code Online (Sandbox Code Playgroud)

将此与我发现的这个链接的答案结合起来 - Java总和2个负数.给出与Java相同的结果

-3121757145 + 2 ^ 32 = 1173210151
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 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
Run Code Online (Sandbox Code Playgroud)