一尘不染

使用按位或0将数字取底

javascript

我的一位同事偶然发现了一种使用按位或来对浮点数求和的方法:

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

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

  • 它是如何工作的?我们的理论是使用这样的运算符将数字转换为整数,从而除去小数部分
  • 这样做有什么好处Math.floor吗?也许更快一点?(双关语无意)
  • 有什么缺点吗?也许在某些情况下不起作用?清晰度很明显,因为我们必须弄清楚这一点,我在写这个问题。

谢谢。


阅读 527

收藏
2020-04-25

共1个答案

一尘不染

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

除无符号右移,以外的所有按位运算都>>>对有符号的32位整数起作用。因此,使用按位运算会将浮点数转换为整数。

与做Math.floor相比有什么优势吗?也许更快一点?(双关语无意)

有什么缺点吗?也许在某些情况下不起作用?清晰度很明显,因为我们必须弄清楚这一点,我在写这个问题。

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