小编典典

使用按位或 0 对数字取底

all

我的一位同事偶然发现了一种使用按位或计算浮点数的方法:

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

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

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

谢谢。


阅读 121

收藏
2022-06-08

共1个答案

小编典典

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

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

它比做 Math.floor 有什么优势吗?也许它有点快?(双关语不是故意的)

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

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

  • 不会通过 jsLint。
  • 仅限 32 位有符号整数
  • 奇怪的比较行为:Math.floor(NaN) === NaN,而(NaN | 0) === 0
2022-06-08