如果要将整数A转换为B,需要改变多少个bit位?

Python实现

样例

如把31转换为14,需要改变2个bit位。

(31)10=(11111)2

(14)10=(01110)2

思路

1、比较容易想到的是移位,然后遇到1计数器加1就好了。但是需要注意终止条件,正数循环移位会得到0,负数并不是这样,会得到1000…000,也就是-2**31。因为Java/Python中整数是以32个bit位存储的,第1位是符号位,31位是值。所以我们的移位操作最多进行31次,这个信息也可以做为循环中止条件。

2、如果是统计正整数的bit位中有几个1可以有如下代码:

count = 0
while num:
    num &= (num - 1)
    count += 1

所以我们可以先对输入的两个数取异或得到num,然后统计num的bit位中有几个1就可以了。但是负数需要特别注意,负数的bit位是补码。而且不能用上面的方法

输入:1, -1
bit位: 1=(0 000…0001),-1=(1 111…111)
异或:-2 = (1 111…110)

因此问题就变成了怎么处理负数:
1、去负号

num ^= -2**31    # 或者
num &= (2**31 - 1)

2、……没想到

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值