gpt4 book ai didi

javascript - ruby 与 javascript 中的按位或

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:40 24 4
gpt4 key购买 nike

尝试将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com