位运算的高级操作分析

以下我将介绍一下位运算的几种高级操作以及其的基本思路

首先最基本的基本操作有:

1:&:与:比对同一位次上的两个数:同为1,结果才为1,有1个为0,结果就为0

那么我们可以进行延伸:

问题:如何根据&与运算来改变某一个数x呢?注:这里我们统一将x看作11010

答:这个时候我们可以对应被改变的数x的位次,引进二进制的所有位次上的值全为1的数y,此时当我们对这两个数进行操作x&y,我们可以计算出结果仍为x,他的值并没有改变,而当我们想改变x的话,我们这时候引进y,让x要改变的某一位对应在y上那一位的数从1变成0,在对x,y进行x&y操作我们马上可以发现对应的值马上变成了我们想要的值

2:或:|:比对同一位次上的两个数:同为0,结果才为0,有1个为1,结果就为1

问题:如何根据|与运算来改变某一个数x的某一位从0变1,1变1呢?

答:这个时候我们可以对应被改变的数x的位次,引进二进制的所有位次上的值全为0的数y,此时当我们对这两个数进行操作x&y,我们可以计算出结果仍为x,他的值并没有改变,而当我们想改变x的话,我们这时候引进y,让x要改变的某一位对应在y上那一位的数从0变成1,在对x,y进行x&y操作我们马上可以发现对应的值马上变成了我们想要的值

3:异或:^:比对同一位次上的两个数:假如相同为0,不同为1

问题:如何根据|与运算来改变某一个数x的某一位从1变0,0变0呢?

答:这个时候我们可以对应被改变的数x的位次,引进二进制的所有位次上的值全为0的数y,此时当我们对这两个数进行操作x^y,我们可以计算出结果仍为x,他的值并没有改变,而当我们想改变x的话,我们这时候引进y,让x要改变的某一位对应在y上那一位的数从0变成1,在对x,y进行x^y操作我们马上可以发现对应的值马上变成了我们想要的值

基本操作介绍完毕,接下来我们开始介绍位运算的高级操作

1:将最后一位变成1:x|1

思想:由题意可知我们需要将最后一位变成1,由上可知假如我们的基本操作只有与和或,而高级操作这里是根据基本操作来得以实现的,假如我们用与&操作的话我们需要一个二进制全为1的数,然后将其最后一位变成0:假如我们用或|操作的话我们需要一个二进制全为0的数,然后将其最后一位变成1,我们马上发现1就可以实现:所以我们不妨将操作变为 x|1

2:将最后一位变为0:(x|1) - 1

思想:我们在实现最后一位变为1的情况下减去1即实现了最后一位变为0

3:将最后一位取反:x ^ 1

思想:此时我们并不知道是最后一位是0还是1,也不知道要将最后一位变为0还是1,所有此时与&和或|操作都不能进行,此时只有异或操作可能能够帮助我们做到改变,我们只需要改变最后一位:而要改变最后一位我们只需要将上述的0改为1即可,也就是1,这是我们进行x^1操作我们可以知道最后一位之前的数字都不会发生改变,而最后一位假如是1的话,异或1后会变成0,0的话则会变为1,也就实现了取反操作

4:将右数的第k位变成1:x∣(1<<(k−1))

思想:这是我们变化的数的位次由最后一位变为了第k位,那么假如我们用到了与&的话我们需要将y的第k位变为0也就是11011(例子),假如我们用到了或|的话我们我们需要将y的第k位变为1也就是00100(例子)我们可以想到利用1向左移动k-1位即可得到这个例子,比较容易实现,然后我们对x和操作后的y进行或|操作即可将右数的第k位变成1

5:将右数的第k位变成0:x&(~(1<<(k−1)))

思想:思想如上,只不过我们这里用到了与&方法这时我们对上面的y=00100进行取反也就得到了y y = 11011 然后对x和y进行或操作也就得到了将右数的第k位变成0

6:将右数的第k位取反:x∧(1<<(k−1))

思想:这时我们不知道第k位是什么,所有我们得用到异或^,这时我们需要y=00100,由上可知利用1向左移动k-1位即可,此时x∧(1<<(k−1))即可实现将右数的第k位取反

最为经典的几种都上上面,本质操作就是利用基本操作实现高级操作,搞清楚了底层逻辑,其它的也就很容易的可以独立解决了,其他的我就不一一赘述了

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值