与补码位或

在看位处理代码时经常就会看到:(变量)与(自己的补码)做位或,也就是x|-x

这个处理的结果就是:得到一个值y,y从最低位开始有多少个连续的0,那x也一样。

例如:

1)

1010 1011 1100 1101   --> x

0101 0100 0011 0011   --> -x

1111 1111 1111 1111   --> x|-x

2)

1010 1011 1100 1000   --> x

0101 0100 0011 1000   --> -x

1111 1111 1111 1000  --> x|-x

3)

1010 1000 0000 0000   --> x

0101 1000 0000 0000   --> -x

1111 1000 0000 0000  --> x|-x

产生这样的效果归功于补码的定义——全部位取反后加1,而这个1就把从最低位开始第一段连续的1全部变成0(因为进位),结果这段0就跟原码中的0一样了,在位或的时候还是为0。

转载于:https://www.cnblogs.com/mmars/archive/2013/05/13/3076062.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值