对于 x & (-x) 的理解以及常用的位运算整理

昨天的周赛有一道题:将整数减少到零需要的最少操作数

这题涉及到对最低比特位的操作,周赛结束后看题解,发现我的思路是没有问题的,但是在代码实现上磕磕绊绊,归根结底是对位操作的掌握不够,看大佬们的题解中对 lowbit 的实现都是x & (-x),遂在此记录一下对于x & (-x)的理解以及其它常用的位运算。

x & (-x)

-x 在计算机中是以 x 的补码形式存储的,计算方式是对 x 按位取反后加 1,即(~x)+1, 也就是说x & (-x) == x & (~x + 1)

那么,对于整数运算 x & (-x)有:

  • 当 x 为 0 时,即 0 & 0,结果为 0。
  • 当 x 为奇数时,最后一个比特位为 1,取反后变成 0,加 1 后不产生进位,对前面的位不产生影响,因此 x 和-x 除了最后一位外,前面的位相反,按位进行与操作后结果均为 0,最后一位是 1&1,结果为 1。即 x 为奇数时,x & (-x) = 1
  • 当 x 为偶数时,分两种情况讨论:
    • 当 x 为偶数且为
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值