Using bitwise OR 0 to floor a number

前端 未结 6 1751
抹茶落季
抹茶落季 2020-11-22 05:01

A colleague of mine stumbled upon a method to floor float numbers using a bitwise or:

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

We were talking about it

6条回答
  •  感情败类
    2020-11-22 05:27

    How does it work? Our theory was that using such an operator casts the number to an integer, thus removing the fractional part

    All bitwise operations except unsigned right shift, >>>, work on signed 32-bit integers. So using bitwise operations will convert a float to an integer.

    Does it have any advantages over doing Math.floor? Maybe it's a bit faster? (pun not intended)

    http://jsperf.com/or-vs-floor/2 seems slightly faster

    Does it have any disadvantages? Maybe it doesn't work in some cases? Clarity is an obvious one, since we had to figure it out, and well, I'm writting this question.

    • Will not pass jsLint.
    • 32-bit signed integers only
    • Odd Comparative behavior: Math.floor(NaN) === NaN, while (NaN | 0) === 0

提交回复
热议问题