按位或红宝石VS的javascript(Bitwise OR in ruby vs javascri

2019-07-19 23:56发布

试图将一个UID发电机从Javascript转换为Ruby的,我想了解以下行为。

这行代码

89190868196442450 | 0

会给在javascript

1074708816

和红宝石

89190868196442450

我完全理解红宝石行为位或运算符的副本,如果它存在于eather操作数了一下,但我仍然感到困惑关于JavaScript的行为。 我在javascript整数表示看起来更深,找不到一个明确的解释。 我发现这个 ,但并未完全得到它。

89190868196442450二进制是100111100110111101001111101000000000011101100000101010010这使得57个比特的长度。

谁能给我一个明确的解释或以上的结果。 我应该做的Ruby代码何种操作,以确保类似的行为?

Answer 1:

如果你想表示与> 32位数字和Javascript中对其执行按位运算,你就要去使用更好的一个模拟的长像这样: http://closure-library.googlecode.com/svn/docs/class_goog_math_Long。 HTML 。

看看这个条目。 技术上的Javascript可以表示2 ^ 53个整数,但按位OPS被限制为32位。

什么是JavaScript的最高整数值,一个号码可以去不失精准?

为了详细说明,发生了什么事在JS当你做89190868196442450 | 0是JavaScript是服用至少显著 32位,并用0,这产生1074708816或运算它们,并且在红宝石它与所有位的或运算它。 如果由于某种原因,你想复制在Ruby中,你会并与1FFFFFFFF你的电话号码所以你只能在至少显著32位由0操作,然后OR它(这什么也不做,但会给你同样的结果)。



文章来源: Bitwise OR in ruby vs javascript