用位运算替代js中的常见操作

一、补码

所谓补码就是所有位取反;

例如3的二进制表示是:00000011,那么3的补码就是11111100;

对于-3的二进制表示就是3的补码+1:11111101;

所以二进制的负数就是该数的补码加1。

随便来一个二进制数来算算它是多少:11111010

首位是1,那么他是个负数,负几呢?数值->补码->+1=负数;

那么这个数就是减一再补码:11111010-1=11111001,再补码,00000110=>6,所以之前的负数就是-6

二、按位非(~)

按位非就是补码的运算过程,数值->补码->+1=负数

所以,一个数的补码就是他的负数-1;

-1的补码:1-1 = 0;

0的补码:0-1 = -1;

1的补码:-1-1 = -2;

所以因为js中没有提供contains方法,所以我们通常是用indexOf是否为-1来判断存不存在;

由于-1的补码和其他(0+)的补码有区别,为0,0在js中就是false;

所以我们直接对indexOf进行按位非运算,如果不存在,那么返回-1,-1的按位非是0,那么就是false;

所以不存在的话,按位非运算就是false;

两层按位非取整

三、

原文地址:https://www.cnblogs.com/eco-just/p/10459195.html