javascript - ruby 与 javascript 中的按位或

标签 javascript ruby bitwise-operators

尝试将 UID 生成器从 Javascript 转换为 Ruby,我想了解以下行为。

这行代码

89190868196442450 | 0

会在 javascript 中给出

1074708816

在 ruby 中

89190868196442450

我完全理解 ruby​​ 的行为,因为如果它存在于 eather 操作数中,则按位或运算符会复制一点,但我仍然对 javascript 的行为感到困惑。 我更深入地研究了 javascript 整数表示,但找不到明确的解释。我 found this , 但没有完全理解。

89190868196442450 在二进制中是 100111100110111101001111101000000000011101100000101010010,这使得它的长度为 57 位。

谁能给我一个明确的解释或上面的结果。我应该对 ruby​​ 代码执行什么操作以确保类似的行为?

最佳答案

如果你想用 > 32 位表示数字并在 Javascript 中对它们执行按位运算,你最好使用像这样的模拟 long:http://closure-library.googlecode.com/svn/docs/class_goog_math_Long.html .

看看这个条目。从技术上讲,Javascript 可以表示 2^53 个整数,但按位运算仅限于 32 位。

What is JavaScript's highest integer value that a Number can go to without losing precision?

详细说明一下,当您执行 89190868196442450 | 时,JS 中发生了什么? 0 是 Javascript 取 least significant 32 位并将它们与 0 进行 OR 运算,得到 1074708816,而在 Ruby 中它与所有位进行 OR 运算。如果出于某种原因你想在 Ruby 中重现它,你可以将你的数字与 1FFFFFFFF 进行运算,这样你就只对最低有效的 32 位进行运算,然后将它与 0 进行或运算(这什么都不做,但会给你相同的结果)。

关于javascript - ruby 与 javascript 中的按位或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14898998/

相关文章:

javascript - 如何在一条语句中将相同的值添加到两个变量?

ruby-on-rails - 将参数值传递给 redirect_to 作为 rails 中的查询字符串

C 字符串和按位运算符

C# NOT (~) 按位运算符返回负值

javascript - 试图访问一个 json 字段

javascript - 访问 JSON 文件时出现问题?

ruby - 为什么 Ruby 案例不能与类一起使用?

ruby-on-rails - Sass::SyntaxError:找不到或无法读取要导入的文件:生产中的 compass

c - C 中二进制表示的按位运算符

javascript - iframe JS https->http 父窗口权限