使用按位或0来放置一个数字
我的一位同事偶然发现了一种使用按位或下列方法设置浮点数的方法:
var a = 13.6 | 0; //a == 13
我们在谈论它,并想知道一些事情。
Math.floor
相比,它有什么优势吗? 也许它快一点? (双关不打算) 谢谢。
它是如何工作的? 我们的理论是使用这样的操作符将数字转换为整数,从而消除小数部分
除了无符号右移,所有位运算>>>
,工作在符号的32位整数。 所以使用按位操作会将float转换为整数。
与Math.floor相比,它有什么优势吗? 也许它快一点? (双关不打算)
http://jsperf.com/or-vs-floor/2似乎稍快
它有什么缺点吗? 也许它在某些情况下不起作用? 明确是一个明显的问题,因为我们必须弄清楚,而且,我正在写这个问题。
Math.floor(NaN) === NaN
,而(NaN | 0) === 0
这是截断而不是地板。 霍华德的回答是正确的; 但是我想补充一点, Math.floor
完全按照负数来表示。 在数学上,这是一个地板。
在上面描述的情况下,程序员更关心截断或将小数完全截断。 尽管他们使用的语法掩盖了他们将float转换为int的事实。
你的第一点是正确的。 该数字被转换为一个整数,因此任何十进制数字都被删除。 请注意, Math.floor
四舍五入到负无穷大的下一个整数,因此在应用于负数时会得到不同的结果。