ルビーの場合:
-1104507 ^ 3965973030 => -3966969949
Javascript の場合:
-1104507 ^ 3965973030 => 327997347
誰かがここで同様の質問をしましたが、答えは Closure のラッパーを指しているだけです。このコードを移植できるように、JavaScript の場合と同じ答えを Ruby から得る方法が必要です。
A ^ B
Ruby の anyから任意の整数A
とB
.
ルビーの場合:
-1104507 ^ 3965973030 => -3966969949
Javascript の場合:
-1104507 ^ 3965973030 => 327997347
誰かがここで同様の質問をしましたが、答えは Closure のラッパーを指しているだけです。このコードを移植できるように、JavaScript の場合と同じ答えを Ruby から得る方法が必要です。
A ^ B
Ruby の anyから任意の整数A
とB
.
これら 2 つは同じ結果であり、モジュロ 2 32です。& 4294967295
Rubyでは、結果を 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