0

ルビーの場合:

-1104507 ^ 3965973030 => -3966969949

Javascript の場合:

-1104507 ^ 3965973030 => 327997347

誰かがここで同様の質問をしましたが、答えは Closure のラッパーを指しているだけです。このコードを移植できるように、JavaScript の場合と同じ答えを Ruby から得る方法が必要です。

A ^ BRuby の anyから任意の整数AB.

4

2 に答える 2

1

これら 2 つ同じ結果であり、モジュロ 2 32です。& 4294967295Rubyでは、結果を 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 に答える