javascript操作符(~、&、|、^、>>、<<)

javascript操作符(~、&、|、

阅读量:1171

点赞量:12

评论量:0
Skill
标签
标签: Javascript
摘要
javascript操作符(~、&、|、^、>>、<<)的原理及用法。
正文

1、操作符非(~)

var num = 7;
var num2 = ~num;
alert(num2);		// -8
var num3 = -1;
var num4 = ~num3;
alert(num4); 		// 0 

可以看出:~ 就是将原来的数值加1后取负,  即: ~x = -(x + 1)。

1.1、底层原理

    先了解一下基本知识

    1、计算机里的数字是以补码的形式表示的。

    2、取反即:0变1,1变0。

    3、第一个数为符号位,0为正数,1为负数。

    4、正数的原码、反码、补码都一样。

    5、负数的反码:符号位不变,其余取反。补码:反码加1。

    6、0的反码补码都为0。


~即对当前数取反所表示的值。计算机中数字以补码形式表示,7的取反正好是-8的补码,所以~7 == -8;

1.2、用途:

1.2.1、取整数随机数

~~(Math.random()*7); 	// 在0~6内取整数随机数,包括0和6
~(Math.random()*7);  	// 在-7~-1内取整数随机数,包括-7和-1
-~(Math.random()*7);  	// 在1~7内取整数随机数,包括1和7 

1.2.2、解决抽象渗漏

抽象渗漏:在代码中暴露底层实现的细节。

 对于indexOf判断是否存在,像>-1、!=-1、>=0、<0之类细节想要屏蔽掉

 那么用~就很好解决了

var str = 'hello World'
if(~str.indexOf('ell')) 
    return true;
else
    return false; 

2、按位与&

var num1 = 25 & 7;
var num2 = 25 & -7;
var num3 = -25 & 7;
var num4 = -25 & -7;
alert(num1); 		// 1
alert(num2); 		// 25
alert(num3); 		// 7
alert(num4); 		// -31 

2.1、原理

1&1=1、1&0=0、0&1=0、0&0=0。

根据规则对补码处理:

25 & 7


25 & -7


-25 & 7


-25 & -7


红 & 红 == 绿    绿 == 最后一行的数的补码

2.2、用途:

判断奇偶 !!(num & 1) 奇数为true

!!(7 & 1)    // true
!!(4 & 1)    // false

3、按位或 |

3.1、原理

1|1=1、1|0=1、0|1=1、0|0=0。

3.2、用途:取整

 1.2 | 0       // 1
-7.8 | 0      // -7

4、按位异 ^

4.1、原理

1^1=0、1^0=1、0^1=1、0^0=0。

5、左移 << 、右移 >> 、无符号右移 >>>


简单记法:

(a << b) === Math.ceil(a*(2**b));

(a >> b) === Math.floor(a/(2**b));


发布于: 8/28/2022, 7:44:26 AM
最后更新: 12/2/2024, 7:22:16 PM