在Ruby中:
-1104507 ^ 3965973030 => -3966969949
在Javascript中:
-1104507 ^ 3965973030 => 327997347
有人问similar question here,但答案只是指向Closure的包装。我需要一种从Ruby获得相同答案的方法,因为我可以将此代码移植到其中。
我需要一种能够从Ruby中的任何A ^ B
获取任何整数A
和B
的JavaScript结果。
答案 0 :(得分:1)
这两个是相同的结果,模2 32 。在Ruby中,您可以& 4294967295
使结果与Javascript中的结果相同。
要涵盖所有情况,您需要考虑Javascript认为二进制值为 signed 32位整数。另一方面,Ruby将从& 4294967295
操作生成 unsigned 32位整数。
所以,在Javascript中简单地说:
c = a ^ b
在Ruby中获得同样的东西:
c = (a ^ b) & 4294967295
c -= 4294967296 if c > 2147483647
答案 1 :(得分: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