用JS的二进制位运算符来取整

2020-10-28T11:24:00

用JS的二进制位运算符来取整

二进制位运算符介绍

  • 二进制或运算符(or):符号为|,表示若两个二进制位都为0,则结果为0,否则为1
  • 二进制与运算符(and):符号为&,表示若两个二进制位都为1,则结果为1,否则为0。
  • 二进制否运算符(not):符号为~,表示对一个二进制位取反。
  • 异或运算符(xor):符号为^,表示若两个二进制位不相同,则结果为1,否则为0。
  • 左移运算符(left shift):符号为<<,表示将一个数的二进制值连着符号位向左移,末尾补0
  • 右移运算符(right shift):符号为>>,表示将一个数的二进制值连着符号位向右移,正数头部补0,负数头部补1
  • 头部补零的右移运算符(zero filled right shift):符号为>>>,表示将一个数的二进制值连着符号位向右移,不管是正数负数都补0

这些位运算符直接处理每一个比特位(bit),所以是非常底层的运算,好处是速度极快,缺点是很不直观,许多场合不能使用它们,否则会使代码难以理解和查错。

为什么二进制运算符能取整

位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。另外,虽然在 JavaScript 内部,数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数。

二进制运算符取整的具体写法

// 二进制或运算符
1.2 | 0 //1

// 二进制与运算符
1.2 & 1 //1

// 二进制否运算符
~~1.2 //1

// 异或运算符
1.2 ^ 0 //1

// 左移运算符
1.2 >> 0 //1

// 右移运算符
1.2 << 0 //1

其他小技巧

  • 不借助中间变量交换两变量值
var a = 1;
var b = 2;
a ^= b, b ^= a, a ^= b;
a // 2
b // 1
  • 右移运算符可以模拟整除2的运算
12.1212 >> 1 //6
-12.1212 >> 1 //-6
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »