ruby与javascript中的按位OR

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

这行代码

89190868196442450 | 0 

会用javascript给出

 1074708816 

在ruby

 89190868196442450 

我完全理解ruby行为,因为Bitwise OR运算符在eather操作数中存在时会复制一点,但我仍然对javascript行为感到困惑。 我在javascript整数表示中看得更深,无法找到明确的解释。 我找到了这个 ,但没有完全明白。

二进制的89190868196442450是100111100110111101001111101000000000011101100000101010010,它使其长度为57位。

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

如果你想用大于32位的数字表示数字并在Javascript中对它们执行按位操作,你最好使用这样的模拟长度: http : //closure-library.googlecode.com/svn/docs/class_goog_math_Long。 HTML 。

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

什么是数字可以达到的JavaScript的最高整数值而不会丢失精度?

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