0.什么是位移运算符?
位移运算符按照平移的方向和填充数字的规则分为三种:
* << 带符号左移运算符
* >> 带符号右移运算符
* >>> 不带符号右移运算符
1…左移运算符
定义
就是按照二进制的形式,把所有的数字向左移动对应的位数,高位移出,低位补零
语法
[需要移位的数字]<<移位的次数
示例
3<<2
意思是把数字3的二进制形式,向左移动两位数,
形成的新二进制对应的数字就是运算的结果
运算过程
- step1:把3转换成二进制数字即0000 0011
- step2:把该数字高位(即左侧)的两个0移出,并在低位(即右侧)补零
- step3:形成的新二进制数字是0000 1100,再转换成十进制数字是12,即运算结果
规律
在没有数字溢出的前提下,对于正数和负数,
左移一位相当于乘以2的1次方,左移n位相当于乘以2的n次方
即:
1<<3这个表达式等于1*2^3=8
2<<这个表达式等于2*2^3=16
验证:
1==>0000 0001==>0000 1000==>8
2==>0000 0010==>0001 0000==>16
2.右移运算符
定义
按照二进制的形式,把所有的数字向右移动对应位数,然后
低位移出,高位补符号位(正数补0,负数补1)
语法:
[需要移位的数字]>>[移位的次数]
示例
示例1
11>>2
过程
11==>0000 1011==>0000 0010==>2
示例2
100>>3
过程:
100=64+32+4=2^6+2^5+2^2==>0011 0100==>0000 0110==>3
规律
右移一位相当于除2, 右移n位相当于除以2的n次方
3.无符号右移运算符
定义
按照二进制的规则,把所有的数字向右移动对应的位数,然后低位移出,高位补0,
对于正数来说与带符号右移相同,对于负数来说不同
示例
null/undefined/NaN>>>0 输出0
1>>>0 输出1
1>>>0 输出4294967295
解释
null/undefined/NaN等非值的位运算,统一返回0
若对于一个负数进行的>>>无符号位移运算符,需要将
负数的二进制码右移,再用0补上,最后返回一个很大的正整数
`