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 2negative numbers。给出与 Java 相同的结果

-3121757145 + 2 ^ 32 = 1173210151
4

1 回答 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
于 2012-11-12T03:39:51.833 回答