Appearance
一元运算符一个操作数,二元运算符俩个操作数,三元运算符三个操作数
+ 一元加运算符将操作转换为 Number 类型。
- 一元减运算符将操作转换为 Number 类型并取反。
~ 按位非运算符
!逻辑非运算符
下面都属于二进制位运算符
二进制与运算符(&): 如果两个符号位都为1,则结果为1,否则为0
javascript
1100 & 0101 返回 0100
二进制或运算符(|): 如果两个符号位都为0,则结果为0,否则为1
javascript
1100|0101 返回1101
二进制异或运算符(^): 若两个二进制位相同,则结果为0;否则为1
javascript
1100 ^ 0101 返回 1001
二进制非运算符(~): (一元运算符)取反,二进制位0变1,1变0,是一元运算符,只有一个操作数
javascript
~1100 返回 0011
二进制左位移运算符(<<): 相当于乘以2的几次方
javascript
5(十进制) << 3 相当于 5*(2的三次方)
左移操作符 (<<) 将第一个操作数向左移动指定位数,
左边超出的位数将会被清除,右边将会补零。
二进制右位移运算符(>>): 相当于除以2的几次方
javascript
5(十进制) >> 3 相当于 5/(2的三次方)
>>是将一个操作数按指定移动的位数向右移动,右边移出位被丢弃,左边移出的空位补符号位(最左边那位)
javascript
const b = 2; // 00000000000000000000000000000010
const c = -5; // 11111111111111111111111111111011
因为是负数,前面补了1,1代表符号
console.log(c >> b); // 11111111111111111111111111111110
二进制无符号右位移(>>>): 也叫作头部补零右位移运算符
javascript
const b = 2; // 00000000000000000000000000000010
const c = -5; // 11111111111111111111111111111011
不管正负,前面只补0
console.log(c >> b); // 00111111111111111111111111111110
因此其表示的结果始终为非负数,与其它按位运算符不同,
无符号右移返回无符号 32 位整
如果移位的位数为负数
8>>-31===8>>1 8>>-32===8>>0 8<<-31==8<<1
当移位的位数是负值时,实际移位的位数是:
用被移位数值类型的最大位数和移位位数相加,
如果结果还是负数,结果继续 加上被移位数值类型的最大位数,
直到结果不为负数为止,此时的结果即为最终移位的位数
如果移位的位数为负数大于32情况请看下面文章