使用按位或0来放置一个数字

我的一位同事偶然发现了一种使用按位或下列方法设置浮点数的方法:

var a = 13.6 | 0; //a == 13

我们在谈论它,并想知道一些事情。

  • 它是如何工作的? 我们的理论是使用这样的操作符将数字转换为整数,从而消除小数部分
  • Math.floor相比,它有什么优势吗? 也许它快一点? (双关不打算)
  • 它有什么缺点吗? 也许它在某些情况下不起作用? 明确是一个明显的问题,因为我们必须弄清楚,而且,我正在写这个问题。
  • 谢谢。


    它是如何工作的? 我们的理论是使用这样的操作符将数字转换为整数,从而消除小数部分

    除了无符号右移,所有位运算>>> ,工作在符号的32位整数。 所以使用按位操作会将float转换为整数。

    与Math.floor相比,它有什么优势吗? 也许它快一点? (双关不打算)

    http://jsperf.com/or-vs-floor/2似乎稍快

    它有什么缺点吗? 也许它在某些情况下不起作用? 明确是一个明显的问题,因为我们必须弄清楚,而且,我正在写这个问题。

  • 不会通过jsLint。
  • 只有32位有符号整数
  • 奇数比较行为: Math.floor(NaN) === NaN ,而(NaN | 0) === 0

  • 这是截断而不是地板。 霍华德的回答是正确的; 但是我想补充一点, Math.floor完全按照负数来表示。 在数学上,这是一个地板。

    在上面描述的情况下,程序员更关心截断或将小数完全截断。 尽管他们使用的语法掩盖了他们将float转换为int的事实。


    你的第一点是正确的。 该数字被转换为一个整数,因此任何十进制数字都被删除。 请注意, Math.floor四舍五入到负无穷大的下一个整数,因此在应用于负数时会得到不同的结果。

    链接地址: http://www.djcxy.com/p/2169.html

    上一篇: Using bitwise OR 0 to floor a number

    下一篇: How to print without newline or space?