操作符-位操作符

1.按位非(NOT)

按位非操作符由一个波浪线(~)表示,执行安慰非的结果就是返回数值的反码。按位非操作的本质:操作数的负值-1。

var num=25;
var num2=~num1;
alert(num2);//-26

2.按位与(AND)
按位与操作符由一个和号字符(&)表示,它有两个操作符数。

第一个数值的位 第二个数值的位 结果
1 1   1
1 0 0
0 1 0
0 0 0

 

 

 

 

简而言之,按位与操作只在两个数值的对应位置都是1时才返回1,任何一位是0,结果都是0;例如:

var result=25&3;
alert(result);//1

为什么?下面是其的底层操作:
  25 = 0000 0000 0000 0000 0000 0000 0001 1001

    3 = 0000 0000 0000 0000 0000 0000 0000 0011

  --------------------------------------------------------

    AND= 0000 0000 0000 0000 0000 0000 0000 0001

 3.按位或(OR)

按位或操作符由一个竖线符号(|)表示,同样也有两个操作数。

第一个数值的位 第二个数值的位 结果
1   1 1
1 0 1
0 1 1
0 0 0

 

 

 

 

按位或操作在有一个位是1的情况下就返回1,而只有在两个位都是0的情况下才返回0;

如下例子对25和3执行按位或操作:

var result=25|3;
alert(result);//27

底层的操作如下:

  25 = 0000 0000 0000 0000 0000 0000 0001 1001

    3 = 0000 0000 0000 0000 0000 0000 0000 0011

  ---------------------------------------------------------

  OR = 0000 0000 0000 0000 0000 0000 0001 1011

 

3.按位异或(XOR)

按位异或操作符由一个插入符号(^)表示,也有两个操作数。

第一个数值的位 第二个数值的位 结果
1 1 0
1 0 1
0 1 1
0 0 0

 

 

 

 

按位异或与按位或的不同之处在于,这个操作在两个数值对应位上只有一个1时才返回1,如果对应的两位都是1或都是0,则返回0。

对25和3执行按位异或操作的代码如下:

var result=25^3;
alert(result);//26

25与3按位异或的结果是26,其底层操作如下所示:

  25 = 0000 0000 0000 0000 0000 0000 0001 1001

    3 = 0000 0000 0000 0000 0000 0000 0000 0011

  --------------------------------------------------------

 XOR = 0000 0000 0000 0000 0000 0000 0001 1010

 

5.左移

左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。

var oldValue=2;//等于二进制的10
var newValue=oldValue << 5;//等于二进制的100000,十进制的64

在向左移位后,原数值的左侧多出5位空位。左移操作会以0来填充这些空位,以便得到的结果是一个完整的32位二进制数。

 

6.有符号的右移

有符号的右移操作由两个大于号(>>)表示,这个操作符将数值向右移动,但保留符号位(即正负号标记)。有符号的右移操作与左移操作恰好相反。

 

7.无符号右移

无符号右移操作符由3个大于号(>>>)表示,这个操作符将数值的所有32位都向右移动,对正位数来说,无符号右移的结果与有符号的右移相同。

posted @ 2015-05-25 14:12  一日三餐  阅读(734)  评论(0编辑  收藏  举报