Ruby中的按位取反运算符

3

我有一段使用位运算符 NOT 的 JS 公式。

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

如何在Ruby中编写相同的表达式?Ruby中没有位非运算符。


1
在 Ruby 中有一个位求反运算符:~200 #=> -201 http://www.techotopia.com/index.php/Ruby_Operators - Automatico
2个回答

7

3
回答确切的问题固然好,但也很重要去看一下根本问题。让我们对问题有更深入的了解可能会帮助我们找到更好的答案。 - DigitalRoss

6
我认为Ruby中相同的表达式应该是(n/m + 0.5).to_i * m或者Integer(n/m + 0.5) * m。看起来双重位求反运算符确实被用来截取计算中的小数部分,以便计算最接近n且是m的倍数的值。(在其他语言中,我会说“转换为整数”,但Javascript有一个统一的算术类型。)更新:Mladen Jablanović建议进行数据类型转换,如果mn都是Fixnum,则需要进行数据类型转换。在Ruby中,1/30,但在JS中是0.333...。以下是一个更完善的建议:
(n.to_f / m).round * m

是的,这正是情况。在 JavaScript 中,通过执行 n | 0 可能会更好(我不知道 Ruby)。 - wildcard
1
哦,我相信(n/m + 0.5).to_i可以写成(n/m).ceil。此外,n和m都可以是整数,因此在除法之前将它们中的一个转换为浮点数可能是明智的选择。 - Mladen Jablanović
关于转换的想法不错。关于 .ceil,它总是会向上舍入。那么 .round 呢? - DigitalRoss
嗯,+0.5 也可以用来进行四舍五入,不是吗? - Mladen Jablanović
我所指的是,1.4.round => 1(1.4 + 0.5).to_i 以及 Integer(1.4 + 0.5) 都等于 1;但是 1.4.ceil => 2 - DigitalRoss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接