《JavaScript高级程序设计》笔记(2):位操作符
1.按位非(NOT)
2.按位与(AND)
3.按位或(OR)
4.按位异或(XOR)
5.左移
6.有符号右移
7.无符号右移
------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.按位非(NOT):
符号:~
功能:返回数值的反码。
var num1 = 25; //二进制00000000000000000000000000011001 var num2 = ~num1; //二进制11111111111111111111111111100110 alert("num2"); //-26
操作数的负值减1。因此下面的代码也能得到相同的结果:
var num1 = 25; var num2 = -num1 -1; alert(num2); // "-26"
按位非是在数值底层操作,因此速度更快。
2.按位与(AND):
符号:&
功能:只在两个数值的对应都是1时才返回1,任何一位是0,结果都是0。如下表:
第一个数值 | 第二个数值 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
var result = 25 & 3; alert(result); //1
3.按位或(OR):
符号: |
功能:在有一个位是1的时候就返回1,而只有在两个位都是0的情况下才返回0。
第一个数值 | 第二个数值 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
var result = 25 | 3; alert(result); //27
4.按位异或(XOR):
符合:^
功能:在两个位对应只有一个1的时候才返回1,如果对应的两个位是1或0时返回0。
第一个数值 | 第二个数值 | 结果 |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
var result = 25 ^ 3; alert("result"); //26
5.左移:
符号:<<
功能:所有位向左移,右边空出来的用0补。
var oldValue = 2; //二进制的10 var newValue = oldValue << 5; //等于二进制的1000000,十进制到底64
左移不影响操作数的符号位。
6.有符号右移:
符号:>>
功能:将数值向右移动,保留符号位(正负号),左侧的空位用符号位来填充。
var oldValue = 64; //二进制的1000000 var newValue = oldValue >> 5; //等于二进制的10,即十进制的2
7.无符号右移:
符号:>>>
功能:正数,同有符号右移;负数,用0填充空位,而不是像正数(有符号右移)以符号位填充空位。
var oldValue = -64; var newValue = oldValue >>> 5;