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)
我检查了Java和Visual 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)