簡體   English   中英

從Ruby獲得與Java相同的結果以進行按位XOR

[英]Getting the same result from Ruby as Javascript for bitwise XOR

在Ruby中:

-1104507 ^ 3965973030 => -3966969949

用Javascript:

-1104507 ^ 3965973030 => 327997347

有人在這里問了類似的問題,但答案只是指向Closure的包裝器。 我需要一種從Ruby獲得與JavaScript相同的答案的方法,以便可以移植此代碼。

我需要一種方法,可以從Ruby中的任何A ^ B獲取任何整數AB的JavaScript結果。

這兩個相同的結果,取模2 32 在Ruby中,您可以& 4294967295使結果與Javascript中的結果相同。

為了涵蓋所有情況,您需要考慮Javascript將二進制值視為帶符號的 32位整數。 另一方面,Ruby將通過& 4294967295操作生成無符號的 32位整數。

因此,在Java語言中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM