简化js移位运算符

js移位运算符


下面我们来看下例题

(N >> j << j) | (((N >> i << i)) ^ N) | (M << i)

**!!!**想要了解移位运算符必须要静下心来,慢慢看,否则没啥效果

注意:右边是低位,左边是高位
首先我们给变量赋值 N=1024 ,M=19,i=2,j=6,
不懂二进制转换的自己百度一下

1.首先N的二进制是 100 0000 0000 ,M的二进制 1 0011,
我们将上面的式子进行分解,精讲
(N >> j << j)
首先右移6位得到 100 00,再左移6位,得到100 0000 0000,
讲到这,许多同学就迷惑了,这不是没改变吗?
重点:这实现的目的就是让低6位清零
这个例子不够明显,让我们来体验下M
(M >> i<<i)
M先右移2位得到100,在左移2位得到1 0000,将镜头拉回到M,坐下对比 1 0011 =》 1 0000,是不是将低两位进行了清零。
相信理解了这个上面的例题也就很好理解了。
在将镜头切换到例题:我们来表述一下他的意义
首先将低6位进行清零 | 将低二位进行清零^N | 将M左移两位
2.接下来我们讲下^ 异或,相同为0,不同为1
例如 00 ^ 11 得到的结果就是11 00^01 得到01

(((N >> i << i)) ^ N) 这句话是啥意思呢?

10011>>2<<2 => 1 0000 ^ 10011 => 10011,简单点说就是让低两位不发生变化

(N >> j << j) | (((N >> i << i)) ^ N),这句话的意思也就呼之欲出了,就是将中间4位清零(5 4 3 2),保留低两位(1 0bit)
(N >> j << j) | (((N >> i << i)) ^ N) | (M << i)也就是说用M的前三位代替N的中间4位,差的位用0代替。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值