【问题标题】:VB .NET calculating differently to JavaVB .NET 的计算方式与 Java 不同
【发布时间】:2012-11-12 03:32:37
【问题描述】:

有人可以向我解释为什么 .net 计算这些与 Java 不同

等式

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

Java 将其计算为

1173210151

.Net 计算为

-574040108

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

任何帮助将不胜感激。

--更新--

谢谢大家,Xor 是我应该使用的。另外,当 Integer 数字太大时,需要解决 Java 不抛出异常的问题。

Xor 的结果为 -3121757145

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

将此与我找到的此链接中的答案结合起来 - Java sum 2 negative numbers。给出与 Java 相同的结果

-3121757145 + 2 ^ 32 = 1173210151

【问题讨论】:

  • 在 Java 中,^XOR 运算符。我不熟悉 VB,但一些 Google 搜索暗示 Xor 是 xor 运算符,^ 是 VB 中的求幂。这可能是问题所在?

标签: java .net vb.net math encryption


【解决方案1】:

我检查了JavaVisual Basic 的运算符优先级表,它们对于表达式中的运算符是相同的。所以优先级不是问题。

请注意,在 Visual Basic 中,^exponentiation 的运算符,而 Xorexclusive or 的运算符。这与 Java 不同,Java 使用 ^ 运算符作为异或并且没有求幂运算符。表达式中的所有其他运算符在两种语言中都是相同的

我无法从代码中判断 sn-p 是 Java 中的还是 Visual Basic 中的 - 我猜是 Java 中的。如果是这种情况,您很可能混淆了独占或;尝试在 Visual Basic 代码中将 ^ 替换为 Xor,看看是否能解决问题:

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

【讨论】:

  • 谢谢奥斯卡。 Java 和 .Net 中的代码相同。当它们处于调试模式时,我将在两个 IDE 的“Watch”窗口中删除等式。我尝试使用“Xor”,结果是-3121757145。在我看来,Java 似乎出了点问题,因为它返回的结果是一个正数。
猜你喜欢
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 2017-10-17
  • 2012-06-14
  • 2016-05-25
  • 1970-01-01
相关资源
最近更新 更多