ruby 中按位不

发布于 2024-10-30 17:28:19 字数 128 浏览 0 评论 0原文

我在 JS 中有一个使用按位 NOT 运算符的公式。

~~(n/m + 0.5) * m;

如何在 ruby​​ 中编写相同的表达式? ruby 中没有按位 NOT 运算符。

I have a formula in JS that uses the bitwise NOT operator.

~~(n/m + 0.5) * m;

How do I write the same expression in ruby? There is no bitwise NOT operator in ruby.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

可爱咩 2024-11-06 17:28:19

我相信 Ruby 中的相同表达式将是 (n/m + 0.5).to_i * m,或者,Integer(n/m + 0.5) * m

看起来双倍按位补码确实用于截断计算的小数部分,以便计算最接近的 n ,使得 n 是 < 的倍数em>米。 (在另一种语言中,我会说“转换为整数”,但 Javascript 有统一的算术类型。)

更新: com/users/82592/mladen-jablanovic">Mladen Jablanovic 建议进行强制转换,是的,如果 mn 都是 Fixnum,那么就需要它。在 Ruby 中,1 / 30,但在 JS 中,它是 0.333... 下面是一个改进的建议:

(n.to_f / m).round * m

I believe the same expression in Ruby would be (n/m + 0.5).to_i * m, or, alternatively, Integer(n/m + 0.5) * m.

It looks like the doubled bitwise complement there is really being used to truncate the decimal part of the calculation, in order to compute the nearest n such that n is a multiple of m. (In another language, I would say "convert to integer", but Javascript has a unified arithmetic type.)

Update: Mladen Jablanović suggests a cast, and yes, if both m and n are Fixnum, it's needed. In Ruby 1 / 3 is 0 but in JS it's 0.333... Here is a refined suggestion:

(n.to_f / m).round * m
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文