ruby 中按位不
我在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这没有帮助吗? http://www.techotopia.com/index.php/Ruby_Operators#Ruby_Bitwise_Operators
~ 按位非(求反)
won't this help? http://www.techotopia.com/index.php/Ruby_Operators#Ruby_Bitwise_Operators
~ Bitwise NOT (Complement)
我相信 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 建议进行强制转换,是的,如果 m 和 n 都是 Fixnum,那么就需要它。在 Ruby 中,1 / 3 是 0,但在 JS 中,它是 0.333... 下面是一个改进的建议:
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: