红宝石与javascript中的按位OR

时间:2013-02-15 16:27:51

标签: javascript ruby bitwise-operators

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

这行代码

89190868196442450 | 0

会在javascript中给出

1074708816

和红宝石

89190868196442450

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

二进制文件中的

89190868196442450为100111100110111101001111101000000000011101100000101010010,使其长度为57位。

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

1 个答案:

答案 0 :(得分:3)

如果您想用>表示数字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取最低有效 32位并将它们与0进行或运算,产生1074708816,而在Ruby中,它与所有位进行或运算。如果由于某种原因你想在Ruby中重现它,你会用1FFFFFFFF和你的数字进行比较,这样你只能在最低有效32位上运行,然后用0运算它(它什么都不做,但会给你相同的结果)。

相关问题