3.5.2 位操作符
位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值
按位非(NOT)
按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码
javascript
var num1 = 25; // 二进制00000000000000000000000000011001
var num2 = ~num1; // 二进制11111111111111111111111111100110
alert(num2); // -26
按位非操作的本质,就是操作数的负值减1
按位与(AND)
按位与操作只在两个数值的对应位都是1 时才返回1,任何一位是0,结果都是0
javascript
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
---------------------------------------------
25&3=0000 0000 0000 0000 0000 0000 0000 0001
按位或(OR)
按位或操作在有一个位是1 的情况下就返回1,而只有在两个位都是0 的情况下才返回0
javascript
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
--------------------------------------------
25|3=0000 0000 0000 0000 0000 0000 0001 1011
按位异或(XOR)
这个操作在两个数值对应位上只有一个1 时才返回1,如果对应的两位都是1 或都是0,则返回0
javascript
var result = 25 ^ 3;
alert(result); //26
25 = 0000 0000 0000 0000 0000 0000 0001 1001
3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
25^3=0000 0000 0000 0000 0000 0001 1010
左移
将数值的所有位向左移动指定的位数,原数值的右侧多出的空位以0 来填充
有符号的右移
将数值向右移动,但保留符号位(即正负号标记位)
无符号右移
将数值的所有位都向右移动,原数值的左侧多出的空位以0来填充