0

在红宝石中:

-1104507 ^ 3965973030 => -3966969949

在 Javascript 中:

-1104507 ^ 3965973030 => 327997347

有人在这里问了一个类似的问题,但答案只是指向了 Closure 的包装器。我需要一种从 Ruby 获得与 JavaScript 相同的答案的方法,这样我就可以移植这段代码。

我需要一种能够从A ^ BRuby 中的任何整数AB.

4

2 回答 2

1

这两个相同的结果,模 2 32。在 Ruby 中,您可以& 4294967295使结果与 Javascript 中的结果相同。

为了涵盖所有情况,您需要考虑到 Javascript 将二进制值视为有符号的 32 位整数。另一方面,Ruby 将从操作中生成无符号32 位整数& 4294967295

因此,简单地在 Javascript 中:

c = a ^ b

在 Ruby 中获得同样的效果:

c = (a ^ b) & 4294967295
c -= 4294967296 if c > 2147483647
于 2013-06-12T05:01:16.450 回答
0

感谢 Mark Adler 提供的最初提示,我认为这是通过算法实现的方法:

max_32_int = (2**32)

c = a ^ b

if c > (max_32_int/2)
  c = c - max_32_int
elsif c < -(max_32_int/2)
  c = c + max_32_int
end
于 2013-06-12T19:22:00.687 回答