使用“按位非”运算符快速取整

2023 年 12 月 22 日 / JavaScript

一般情况,JavaScript 取整或转换为整形时都会使用 Math.celingMath.floor 方法来进行,两者分别对应的是向上取整和向下取整。在位运算的范畴中存在“按位非”运算这种方式,通过对这种计算方式的调用可以实现比 Math.floor 更快的向下取整操作。

按位非运算符一般用于反转被操作数的位。即操作数中的每个位取反,0 变成 1,1 变成 0。例如存在一个十进制结果为 65 的二进制数 0101,如果将其进行按位非运算,那么将会得到 1010,两次运算则是之前的数,转换到十进制同理。

对于浮点数和小数,按位非操作就会不适用,计算过程就会忽略掉小数点之后的数,只保留小数点之前的内容。这种情况下,对操作数使用两次按位非计算就可以获得向下取整的结果。

const fixed_number = 3.14;
const bitwise_not_number = ~~fixed_number;
// bitwise_not_number => 3