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.
按位非~
非运算法则:单目运算符
二进制原码: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*/