在红宝石中:
-1104507 ^ 3965973030 => -3966969949
在 Javascript 中:
-1104507 ^ 3965973030 => 327997347
有人在这里问了一个类似的问题,但答案只是指向了 Closure 的包装器。我需要一种从 Ruby 获得与 JavaScript 相同的答案的方法,这样我就可以移植这段代码。
我需要一种能够从A ^ B
Ruby 中的任何整数A
和B
.
在红宝石中:
-1104507 ^ 3965973030 => -3966969949
在 Javascript 中:
-1104507 ^ 3965973030 => 327997347
有人在这里问了一个类似的问题,但答案只是指向了 Closure 的包装器。我需要一种从 Ruby 获得与 JavaScript 相同的答案的方法,这样我就可以移植这段代码。
我需要一种能够从A ^ B
Ruby 中的任何整数A
和B
.
这两个是相同的结果,模 2 32。在 Ruby 中,您可以& 4294967295
使结果与 Javascript 中的结果相同。
为了涵盖所有情况,您需要考虑到 Javascript 将二进制值视为有符号的 32 位整数。另一方面,Ruby 将从操作中生成无符号32 位整数& 4294967295
。
因此,简单地在 Javascript 中:
c = a ^ b
在 Ruby 中获得同样的效果:
c = (a ^ b) & 4294967295
c -= 4294967296 if c > 2147483647
感谢 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