用bis和bic实现所有位级操作

在Digital Equiment 的VAX计算机中,只有两种对位的操作函数:位设置bis和位清除bic。
其中bis(x, m)表示对于m中为1的位,置x对应的位为1. bic(x, m)正好相反,对于m中为1的位,置x对应的位为0。参数m有个更常用的称谓——掩码。对于掩码你一定不陌生,子网掩码、颜色掩码... 简单地说,掩码就是个过滤器,滤掉我们不希望得到的东西。

好了,扯远了,言归正传。


1. 位或(|)的实现
首先考虑一下位或的定义,两个参数的某一位至少有一为1则结果的对应位为1。那么我们该好好利用一下掩码了,我们要做x和y的位或,首先我们把x拿出来,令结果等于x(什么?这就结束了?当然不是)。我们还缺什么?x为0而y为1的那些位,结果应该为1。那我们就把y当做掩码,筛选掉y中为0的位,把y为1的位都赋值给结果(即使x已经将结果的改位赋值为1也不影响),就可完成位或的实现。

结果:bis(x, y)


2. 位取反(~)的实现
同样利用取反的定义和掩码的作用,我们可以简单得到对x(一个字长)位取反的做法:把0xFFFFFFFF(32位机)用x做掩码,过滤掉x为1的位。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值