JS中的位操作符:“与,或,非,异或,左移,右移”

Javascript有算数操作符,赋值操作符,比较操作符,逻辑操作符,同时也有位操作符。

引子

先想一想,如下,该输出什么答案?


    console.log('5 & 1 :', ( 5 & 1 ));
    console.log('5 | 1 :', ( 5 | 1));
    console.log('~ 5:', (~5));
    console.log('5 ^ 1 :', ( 5 ^ 1));
    console.log('5 << 1 :', ( 5 << 1));
    console.log('5 >> 1 :', ( 5 >> 1));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

十进制转二进制

先将值转换成二进制。 
这里写图片描述

5除以2余1,2除以2余0,1除以2余1。将余数倒过来,就得到5的二进制数101。 同理可得1的二进制数1。

按位与&

与运算法则:两位同时为“1”,结果才为“1”,否则为0 
5 & 1 = 1

按位或|

或运算法则:只有当2个位都是0时,或的结果才是0.

5| 1 = 5


按位非~

非运算法则:单目运算符

二进制原码:0000 0000 0000 0000 0000 0000 0000 0101 
取反操作后:1111 1111 1111 1111 1111 1111 1111 1010 
有符号整数都是用补码来表示,而补码=反码+1 
1.先求反码:1000 0000 0000 0000 0000 0000 0000 0101 
2.再求补码:1000 0000 0000 0000 0000 0000 0000 0110 
最高位代表符号位 1 表示负数,0 表示正数 
~5 = -6

按位异或^

异或运算法则:两位不同,结果为“1”,否则为0 

5^1 = 4


/*
>>表示是带符号的右移
>>>表示无符号的右移

带符号右移(>>):按照二进制把数字右移指定数位,高位如符号位为正补零,符号位负补一,低位直接移除
无符号的右移(>>>):按照二进制把数字右移指定数位,高位直接补零,低位移除!
*/

按位左移

左移运算法则:将数值向左移动若干位,用0补足 
5<< 1 = 10

按位右移

右移运算法则:将数值向右移动若干位 

5>>1 = 2

逗号表达式:
一般形式:表达式1,表达式2,表达式3,......表达式n

求解过程:先计算表达式1的值,再计算表达式2的值,......一直计算到表达式n的值。最后整个表达式的值是表达式n的值。 

看下面几个例子:

 1)x = 8*2, x*4; /*整个表达式为逗号表达式,它的值为64,x的值为16*/

 2)(x = 8*2, x*4) , x*2; /*整个表达式为逗号表达式,它的值为32,x的值为16*/

 3)x = (z=5,5*2); /*整个表达式为赋值表达式,它的值为10,z的值为5*/


猜你喜欢

转载自blog.csdn.net/simple_tifa/article/details/79564665