Conversion: Write a function to determine the number of bits you would need to flip to convert integer A
to integer B
.
EXAMPLE
|
|
Hints: #336, #369
解法1
这个题可以用XOR来做,因为XOR的意思是相异为真,然后再数一下有多少个1
。
|
|
解法2
解法1用位移来计算有多少个1,还可以有更简便的方法。
如果我们可以每次迭代都可以清除一个数字最右边的1
,那么我们只需要计算吧这个数字清零为止共做了几次循环即可。
用n & (n - 1)
可以做到这一点,回顾5.5 - Debugger里对于减法的描述:
当你在给二进制做减法的时候,实际上是把最右边的
1
变成0
,把它右边的0
都变成1
。
实际上就是:
|
|
两者AND一下就把最右边的1
给去除了。
代码:
|
|
评论